"background(&) and wait"和直接在bash中执行普通命令有区别吗?

Is there a difference between "background(&) and wait" and simply execute the normal command in bash?

在bash个脚本中,我见过这样的代码

command &
wait

我想知道这个操作背后的动机是什么,而不仅仅是 运行

command

相反。

这个问题的动机来自这个post:bash wait for rsync to finish for proceeding,其中poster选择使用“等待”方法,而未接受的答案建议使用正常的命令方法.

虽然根据我的理解post的答案应该是正确的,但我也看到其他各种地方(包括公司和个人项目)在实践中使用“后台等待”方法,所以我有点困惑。

是否存在两个代码实际存在差异的情况?

考虑脚本

trap 'echo bye' SIGINT
sleep 20

如果 SIGINT 被发送到您的脚本,而 sleep 是 运行,陷阱将不会执行(并且脚本不会退出)直到 sleep 退出。

现在考虑

trap 'echo bye' SIGINT
sleep 20 &
wait

现在,阻止脚本的不是 sleep,而是它自己的内置 wait 命令。如果 SIGINT 被发送到您的脚本,陷阱将执行并且您的脚本将立即退出。