"wait &"("wait &sand") は便利な (bash) シェル/シェルスクリプトイディオムまたは技術ですか?

私は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 spec­ification;  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 speci­fies 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

おすすめ記事