Bash

“wait &”(“wait &”)是一種有用的(bash)shell / shell 腳本習語或技術嗎?

  • October 19, 2015

我已經為執行 GNU“bash”shell 的 Linux 機器“繼承”了一些 shell 腳本。在一種特殊情況下,機器執行 GNU bash 版本 2.0.5b

其中一個腳本有一個wait &(“等待與號”)指令作為for循環“for line”的一部分。乍一看,這似乎是一個奇怪/有趣的成語,但我的網路搜尋沒有返回任何相關內容。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

我無法想像編寫此程式碼的任何理由,而且我不太確定編寫此程式碼的人想要實現什麼。wait這裡什麼都不做——從它的角度來看,沒有程序,所以它會立即退出並基本上充當一個 noop(wait由於命令替換,它本身在子程序中執行,但這無關緊要)。

順便說一句,解析 ls 的輸出非常脆弱。相反,請考慮這樣做:

for file in *.txt; do
   ...
done

引用自:https://unix.stackexchange.com/questions/236426