2
我试图确保命令在并行命令终止后以串行方式运行。在Bash中完成先前作业时执行命令(仅限)
command1 &
command2 &
command3
在上述例子中,command1
和command2
在背景的同时推出,但command3
之后立即运行。我知道这是Bash的预期行为,但我想知道是否在command1
和command2
终止之后有一个command3
的启动方式。
这可能是可以这样做:
(command1; touch done1) &
(command2; touch done2) &
while [ ! -f done1 ] && [ ! -f done2 ]; do sleep 1000; done
command3
...但如果一个更优雅的解决方案可我会抓住。因为这些命令注定要在PBS队列中使用,所以加入需要被动。有任何想法吗?提前致谢。
感谢您的快速答复!这会做到这一点。为了推动它,但进一步,我想要的东西像'((command1&; command2&; wait; command3)&;(commandA&; commandB&; wait; commandC)&)'表现为第一个等待'是依赖'command1'和'command2',第二个'wait',只在'commandA'和'commandB'上,我需要指定作业ID到'wait'? –
这很符合你的想法。 'wait'只等待当前shell中的命令。 '(..)'创建一个子shell,所以'a&(b&(等待)'将只等待'b'。另外,'&;'是无效的;只需使用&&。 –
可能有用提到'jobs'命令会给出正在运行的作业列表 - 'jobs -p'只给出pid。 – bryn