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