我正在通过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]}))'' –