これに続いて question bashスクリプトで次のコマンドを使用しました。
find ${svn_root} -maxdepth 2 -type d -exec bash -c 'if svnlook info "$1" &>/dev/null ;then echo"$1" >>${log_file} ;svnadmin verify "$1" 2>>{log_file} ;fi' _ {} \;
両方の変数は、スクリプトの先頭で定義されます。変数$ svn_rootは適切に展開されますが、$ log_file変数は展開されません。
変数が-exec bash -c
コマンドのいずれにも渡されないことがわかります。これはサブシェルだからだと思いますか?行のecho
部分の前でlog_file=/path/to/log ;
をスリップできますが、findコマンド内で変数を変更せずにスクリプト内の変数を変更すると、コマンドのその部分のハードコードの種類2つの個別のログファイルに出力します。
その変数をそのサブシェルにインポート/エクスポートできますか(もしそうであれば)?
主に2つの方法があります。
シェルの2番目の引数として渡します
find ... -exec bash -c '...' _ {} "$log_file" \;
そして、"$2"
の代わりに ${log_file}
スクリプト内
環境経由で渡します:
log_file=$log_file find ... -exec bash -c '...' _ {} \;
ところで、それはサブシェルではありません。
を使用して
find ${svn_root} -maxdepth 2 -type d -exec bash -c 'if svnlook info "$0" &>/dev/null ;then echo"$0" >> "$1" ;svnadmin verify "$0" 2>> "$1" ;fi' {} "$log_file" \;
これは関数でもスクリプトでもないため、$0
および$1
が必要です。
_bash -c ""
_で二重引用符を使用した場合、サブシェルでそのような変数を表示できるはずです。
より簡単な方法は、次のように、メインスクリプトの_log_file
_変数をexport
だけにすることです。
_export log_file
_
ソース: サブシェルに変数を「送信」する方法