Pipe

如何編寫腳本以便我可以通過管道找到它?

  • February 18, 2022

我有一個腳本,它需要文件作為參數,並為每個文件執行一組指令。我應該如何編寫它才能將其通過管道傳輸到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 的腳本?

引用自:https://unix.stackexchange.com/questions/691244