-> find .. -name bin -exec for file in {}/* ; do echo $file ; done \;
-bash: syntax error near unexpected token `do'
このコマンドの正しい構文は何ですか?
ベストアンサー1
for
複数のステートメント(-loopなど)を引数として使用するには、明示的にシェルを呼び出す-exec
必要がありますbash
。例:
find .. -name bin -exec bash -c 'for file in "$1"/* ; do echo "$file" ; done' none {} \;
スペースやその他の敵対的な文字を含むファイル名にも安全です。
bash -c
動作原理
bashは、次の形式のコマンドを使用して呼び出すことができます。
bash -c some_complex_commands arg0 arg1 arg2 ...
この場合、bashは文字列内のすべてを実行しますsome_complex_commands
。このコマンドは通常のシェルを使用して使用できます位置パラメータ。arg0
上記のコマンドの後の最初の引数はに割り当てられ$0
、2番目の引数はに割り当てられ$1
、3番目の引数はに割り当てられる$2
式です。
通常のシェルスクリプトを実行すると、$0
これはスクリプト名と$1
コマンドラインに表示される最初の引数です。この伝統を維持しながらスクリプトに適切な名前がないため、ファイル名(find表記)を割り当てるようにbash -c
コマンドが作成されました。 {}
$1
none
$0