
ファイルをパラメータとして使用し、各ファイルに対して一連の指示を実行するスクリプトがあります。パイプで接続するにはどうすればよいですか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
答え1
あなたのシャーバン
# !/bin/bash
何の効果もありません(ただ注釈のように見えます)。スペース許可後#!
しかし、#
との間にはありません!
。
したがって、実行されるスクリプトは、拡張テスト構文(元々)をサポートしていないことによって解釈されxargs
ます。/bin/sh
[[ ... ]]
ksh
を介さずに対話型シェルから直接スクリプトを実行すると、xargs
bashサブシェルで解釈される可能性が高くなります。バラよりShebangなしでスクリプトを実行するシェルインタプリタとは何ですか?