私はGNU "bash"シェルを実行しているLinuxシステムのいくつかのシェルスクリプトを「継承」しました。特別なケースでは、マシンはGNU bashバージョン2.0.5bを実行していました。
これらのスクリプトの1つには、wait &
「for line」ループの一部として(「wait&sand」)ディレクティブがありますfor
。一見すると、これは好奇心旺盛で興味深いイディオムのように見えますが、ウェブで検索した結果に関連するものは返されませんでした。man wait
以下の説明とともに、「BASH_BUILTINS」(「BASH BUILTINS COMMAND」)のマンページを表示します。
wait [n]
Wait for the specified process and return its termination status.
n may be a process ID or a job specification; if a job spec is given,
all processes in that job's pipeline are waited for. If n is not
given, all currently active child processes are waited for, and the
return status is zero. If n specifies a non-existent process or job,
the return status is 127. Otherwise, the return status is the exit
status of the last process or job waited for.
マニュアルページのこの部分を読むと、wait &
「バックグラウンドで自動的に」現在アクティブなすべての子プロセスを待ち、状態0を返します。」。私の解釈は正しいですか?これは一般的で便利なイディオムですか?
コンテキストを追加するために、スクリプトで次の使用法を説明します。
for file in `ls *.txt ; wait &`
do
...
[cp instructions]
...
[mv instructions]
...
[mailx instruction]
done
答え1
私はこのコードを書く理由を想像することはできません。wait
ここでは何もしません。観点から見るとはいサブプロセスがないため、すぐにシャットダウンされ、デフォルトでnoopとして機能します(wait
コマンドのオーバーライドのため、それ自体はサブプロセスで実行されますが、関係ありません)。
記述子として、lsの出力を解析することは非常に脆弱です。。代わりに、次のことを試してください。
for file in *.txt; do
...
done