私は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