"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
被发送到您的脚本,陷阱将执行并且您的脚本将立即退出。
在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
被发送到您的脚本,陷阱将执行并且您的脚本将立即退出。