「待機&」(「待機アンパサンド」)は、便利な(bash)シェル/シェルスクリプトのイディオムまたはテクニックですか?


12

GNU「bash」シェルを実行しているLinuxマシン用のシェルスクリプトを「継承」しました。1つの特定のケースでは、マシンはGNU bashバージョン2.0.5bを実行します

これらのスクリプトの1つにはwait &forループの「for line」の一部として(「アンパサンドを待つ」)命令があります。一見すると、それは奇妙な/興味深いイディオムのようですが、私のWeb検索で関連性のあるものは何も返されませんでした。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 &、「現在アクティブなすべての子プロセスが待機され、戻りステータスがゼロである」ことを確認しているように見えます(バックグラウンドで)。私はこの解釈で正しいですか?これは一般的または有用なイディオムですか?

追加のコンテキストとして、私はスクリプトで次のような使用法について話しています。

for file in `ls *.txt ; wait &`
do
   ...
   [cp instructions]
   ...
   [mv instructions]
   ...
   [mailx instruction]
done

回答:


14

このコードを書く理由は何も想像できませんし、このコードを書いた人が何を成し遂げようとしていたのかもよくわかりません。waitここでは何もしません-その観点から子プロセスないため、ただちに終了し、基本的にnoopとして機能します(waitコマンドの置換により、それ自体が子プロセスで実行されますが、それは無関係です)。

余談ですが、lsの出力の解析は非常に脆弱です。代わりに、これを行うことを検討してください:

for file in *.txt; do
    ...
done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.