私はSolaris 10を使用していますが、ksh(88)、bash(3.00)、およびzsh(4.2.1)で以下をテストしました。
次のコードは結果を生成しません。
function foo {
echo "Hello World"
}
find somedir -exec foo \;
(交換することによって示されるように検索には、いくつかのファイルが一致しない-exec ...
と-print
)、およびから外部に呼び出されたときに機能が完璧に動作find
コール。
man find
ページの内容は-exec
次のとおりです。
-exec command実行されたコマンドが 終了ステータスとしてゼロ値。の終わり コマンドはエスケープされた セミコロン(;)。コマンド引数{}は 現在のパス名に置き換えられます。もし -execの最後の引数は{}であり、あなたは セミコロン(;)ではなく+を指定します。 コマンドの呼び出し回数が少ない {}はパス名のグループに置き換えられました。もし コマンドを呼び出すと、 終了ステータスとしてゼロ以外の値、検索 ゼロ以外の終了ステータスを返します。
私はおそらくこのようなことをして逃げることができます:
for f in $(find somedir); do
foo
done
しかし、私はフィールドセパレーターの問題に対処することを恐れています。
呼び出しからシェル関数(同じスクリプトで定義され、スコープの問題に煩わされないようにする)をfind ... -exec ...
呼び出すことは可能ですか?
私は両方でそれを試してみました/usr/bin/find
し、/bin/find
そして同じ結果を得ました。
PATH
ます。または、使用してsh -c '...'
、両方を定義し、...
ビットで関数を実行します。関数とスクリプトの違いを理解するのに役立つかもしれません。
export -f foo