“wait &”(“wait &sand”)是一个有用的(bash)shell / shell 脚本习惯用法或技术吗?

“wait &”(“wait &sand”)是一个有用的(bash)shell / shell 脚本习惯用法或技术吗?

我为运行 GNU“bash”shell 的 Linux 机器“继承”了一些 shell 脚本。在一种特殊情况下,机器运行 GNU bash 版本 2.0.5b

这些脚本之一有一个wait &(“wait &sand”)指令作为循环“for line”的一部分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 &正在默默地(在后台)确保“等待所有当前活动的子进程,返回状态为零”。我的这种解释正确吗?这是一个常见和/或有用的习语吗?

为了添加上下文,我正在讨论脚本中的以下用法:

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

相关内容