我正在通过ssh在bash中执行一个管道命令链。如果任何一个命令失败,我想要退出。如果整个管道执行完成后发生退出也可以。如果其中一个命令失败,我只想给管道指定一个总的'fail'状态。
一个简单的例子是:
一个简单的例子是:
ssh $REMOTE_HOST "CMD1 | CMD2" >> file.txt
如果我在本地执行命令链,我可以使用${PIPESTATUS[0]}来获取链中任何命令的退出状态。但是通过ssh,我得到的是最后一个命令的退出状态。例如,如果CMD1失败而CMD2成功,则localhost上的$?将给我返回0。如果CMD1失败,如何将一个总的失败状态分配给整个管道呢?
PIPESTATUS
来提取在本地运行时链中任何命令的退出状态。据我回忆,我无法使用PIPESTATUS
在ssh
上运行并获取“总体”退出状态。因此需要这个额外的说明。 - RDKPIPESTATUS
不会传输到本地 shell,但是你可以在远程端运行它。也就是说:ssh "$host" bash <<<'CMD | CMD2; exit $((PIPESTATUS[0] | ${PIPESTATUS[1]}))'
- Charles DuffySTATUS=$(ssh "cmd1 | cmd2; PIPESTATUS[*]")
的东西,然后跟着if [ STATUS -ne 0 ] ...
- RDK