我在子目錄下有一個插件列表。我想用一個命令構建所有這些。有一個示例目錄布局。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是您無需擔心目錄名稱之前的直接路徑。您將獲得找到的目錄的最終基本名稱。
- 1 回答
- 0 關注
- 177 瀏覽
添加回答
舉報
0/150
提交
取消