Pipe
如何編寫腳本以便我可以通過管道找到它?
我有一個腳本,它需要文件作為參數,並為每個文件執行一組指令。我應該如何編寫它才能將其通過管道傳輸到
find
?在下面的範例中,我沒有find
這樣使用。我假設它的輸出具有相同的結構printf "%s\n..."
(不是嗎?)
my-script.sh
:# !/bin/bash help() { echo "help" echo } while [[ $# -gt 0 ]] do case $1 in *) echo "$1" shift # past argument ;; esac done
美好的:
$ cat foo; echo; cat bar foo bar $ ./my-script.sh foo bar foo bar
但是之後:
$ printf "%s\n%s\n" "./foo" "./bar" | xargs -n 1 ./my-script.sh ./my-script.sh: 9: ./my-script.sh: [[: not found ./my-script.sh: 9: ./my-script.sh: [[: not found
你的shebang
# !/bin/bash
無效(它只是看起來像一個評論)。在 之後允許空格,但在和之間不允許
#!
空格。#``!
因此,執行通過的腳本
xargs
被/bin/sh
- 解釋,它不支持[[ ... ]]
擴展測試語法(最初來自ksh
)。當您直接從互動式 shell 而不是 via 執行腳本時
xargs
,它可能會被 bash 子 shell 解釋。請參閱哪個 shell 解釋器執行沒有 shebang 的腳本?