我为运行 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 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 &
正在默默地(在后台)确保“等待所有当前活动的子进程,返回状态为零”。我的这种解释正确吗?这是一个常见和/或有用的习语吗?
为了添加上下文,我正在讨论脚本中的以下用法:
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