我正在通過ssh在bash中執行管道命令鏈。如果任何一個命令失敗,我想退出。如果在整個管道完成執行之後出口發生,那麼可以。如果其中一個命令失敗,我只想爲管道分配一個總體「失敗」狀態。通過ssh執行的管道命令的退出狀態
一個最小的例子是:
ssh $REMOTE_HOST "CMD1 | CMD2" >> file.txt
我想,如果管道中的任何一個命令失敗,失敗退出。如果我在本地執行命令鏈,我可以使用${PIPESTATUS[0]}
拔出鏈中任何命令的退出狀態。但通過SSH,我得到了最後一個命令的退出狀態。即如果CMD1
失敗,並且CMD2
成功,則本地主機上的$?
將給我0
。如果CMD1
失敗,我怎樣才能將整體失敗狀態分配給管線?
關於「over ssh」沒有任何關於這個問題的重要部分 - 你可以取出SSH並仍然有同樣的問題。考慮到在下一次詢問之前將其作爲找到問題核心的一部分。 –
@CharlesDuffy正如我的問題所述,我能夠在本地運行時運行'PIPESTATUS'來截取鏈中任何命令的退出狀態。據我所知,我無法使用'PIPESTATUS'來運行'ssh'並獲得'全局'退出狀態。因此,額外的規格。 – RDK
'PIPESTATUS'不會傳輸到本地shell,但可以在遠程端運行它。即:'ssh「$ host」bash <<<'CMD | CMD2;退出$((PIPESTATUS [0] | $ {PIPESTATUS [1]}))'' –