为了账号安全,请及时绑定邮箱和手机立即绑定

一次性在一个目录下构建多个 go 插件

一次性在一个目录下构建多个 go 插件

Go
狐的传说 2023-06-19 17:20:17
我在子目录下有一个插件列表。我想用一个命令构建所有这些。有一个示例目录布局。plugins/cat/cat.goplugins/dog/dog.goplugins/cow/cow.go我现在像这样构建它们:go build -i -buildmode=plugin -o build/cat.so plugins/cat/cat.gogo build -i -buildmode=plugin -o build/dog.so plugins/dog/dog.gogo build -i -buildmode=plugin -o build/cow.so plugins/cow/cow.go还有另一个命令(因为它在 Makefile 中),它帮助我更接近:# Ex.: make bin-so TARGET=catbin-so: builddir    go build -i -buildmode=plugin -o build/$(TARGET).so plugins/$(TARGET)/$(TARGET).go我想创建一行来构建这些插件。我发现了如何列出文件夹名称,但我必须在上面的命令中以某种方式使用它。find ./plugins -mindepth 1 -maxdepth 1 -type d | awk 'sub(/^.*\//, "")'所以它会列出文件夹的名称,这些对我来说很好,但我必须将它重定向到插件构建器命令。我想要类似的东西(只是一个例子):find ./plugins -mindepth 1 -maxdepth 1 -type d | awk 'sub(/^.*\//, "")' | go build -i -buildmode=plugin -o build/$1).so plugins/$1/$1.go
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

find您可以使用一个选项在一个命令中执行此操作,-execdir该选项允许您直接在文件的基本名称上运行命令


find ./plugins -mindepth 1 -maxdepth 1 -type d -execdir bash -c '

    for arg; do

        name="${arg##*./}"

        go build -i -buildmode=plugin -o build/"${name}".so plugins/"${name}"/"${name}".go

    done' _ {} +

find这比在获得相同结果后使用多个管道要好得多。将 中的部分想象成sh -c '..'一个单独的脚本,并且您将参数传递给带有返回名称./cow.go等的脚本。


此处的优点-execdir是您无需担心目录名称之前的直接路径。您将获得找到的目录的最终基本名称。

查看完整回答
反对 回复 2023-06-19
  • 1 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信