"find .. -exec .."コマンドから戻り値を取得しますか?

"find .. -exec .."コマンドから戻り値を取得しますか?

Bashスクリプトには、渡された引数に対していくつかの処理を実行する関数があります。処理がどのように進行したかに応じて戻り値を設定したいと思います。問題は関数がから呼び出されるため、find ... -exec bash -c funcこの方法でグローバル変数を更新する機会が失われることerror_codeです。

#!/bin/bash
check_file() {
    filename=$1
    echo -n "$filename ... "
    if [ ... ]; then
        echo "NOK"
# return/update error_code?
    else
        echo "OK"
    fi
}

export -f check_file
# look for exec binary only
find . -type f -executable -exec bash -c "file -i {} | grep -q 'application/x-executable; charset=binary'" \; -exec bash -c 'check_file "$0"' {} \;
# exit $error_code??

関数がグローバル変数を更新できる場合、関数は複数回呼び出されるため、error_codeハンドルが「NOK」の場合にのみ更新されます。findcheck_file

既存のスクリプトを使用してこれを行うにはどうすればよいですか?それとも別のアプローチが必要なのでしょうか?

答え1

私は好きなようにスクリプトを実行させました。最もエレガントな解決策ではありませんが、作業は完了しました。

メインシェルは一時ファイルを生成し、その名前を書き込むことができる後続のサブシェルにエクスポートします。メインシェルは最終的に戻りコードを読み取り、一時ファイルを削除してからエラーコード値を返します。

#!/bin/bash
export tmpf=`mktemp`
rcode=0
echo $rcode > $tmpf
...

check_file() {
...
echo 1 > $tmpf
...
}
...
rcode=`cat $tmpf`
rm -f $tmpf
echo "done."
exit $rcode

関連情報