通过ssh执行的管道命令的退出状态

刚果民主共和国

我正在通过ssh在bash中执行管道命令链。如果任一命令失败,我想退出。如果退出发生在整个管道完成执行之后,也可以。如果命令之一失败,我只想为管道分配总体“失败”状态。

一个最小的例子是:

ssh $REMOTE_HOST "CMD1 | CMD2" >> file.txt

如果管道中的任何一条命令失败,我将失败退出。如果我在本地执行命令链,则可以${PIPESTATUS[0]}用来提取链中任何命令的退出状态。但是通过ssh,我得到了最后一条命令的退出状态。即如果CMD1失败并CMD2成功,则$?在localhost上给我0如果CMD1失败,如何为管道分配总体失败状态

4ae1e1

由于此问题已标记bash,因此我假设远程用户的默认外壳为Bash。在这种情况下,你应该设置pipefail选项通过set -o pipefail根据上面链接的Bash参考手册:

如果设置,则管道的返回值是以非零状态退出的最后一个(最右边)命令的值,如果管道中的所有命令成功退出,则返回零。默认情况下禁用此选项。

尝试例如

ssh $REMOTE_HOST 'false | true'
ssh $REMOTE_HOST 'set -o pipefail; false | true'

查看ssh命令退出状态的差异


另一方面,如果远程用户的默认外壳程序是zsh,就像我一样,则应setopt pipe_fail改用。请注意,这是zsh的相对较新的功能。我不能确定何时添加它,但我知道它适用于5.0.5,但不适用于5.0.2。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

管道中命令的退出状态

来自分类Dev

如何通过SSH获取在OSX终端中运行的命令的退出状态代码?

来自分类Dev

管道命令的单独执行状态

来自分类Dev

通过在python内部的Expect命令中嵌入的ssh远程执行的grep命令的返回状态

来自分类Dev

如何获取getline管道中命令的退出状态?

来自分类Dev

Bash:检查多管道命令链的退出状态

来自分类Dev

如何获取getline管道中命令的退出状态?

来自分类Dev

如何捕获管道中非最终命令的退出状态?

来自分类Dev

在bash中检查ssh远程命令的退出状态

来自分类Dev

通过strace运行时,命令的退出状态不同

来自分类Dev

bash:通过ssh并行执行命令

来自分类Dev

无法通过ssh执行mpiexec命令

来自分类Dev

通过ssh奇怪的行为执行远程命令

来自分类Dev

通过SSH远程执行sudo NOPASSWD命令

来自分类Dev

git 挂起通过 ssh 执行远程命令

来自分类Dev

sh命令的退出状态?

来自分类Dev

从rsync命令退出状态

来自分类Dev

链接命令的退出状态

来自分类Dev

在管道之间传播退出状态

来自分类Dev

在管道之间传播退出状态

来自分类Dev

查找用于通过PowerShell执行cmd命令的退出代码

来自分类Dev

在Bamboo中通过SSH发出的nohup命令不会退出

来自分类Dev

通过父级执行命令时使用管道

来自分类Dev

Salt无法通过管道或重定向执行命令

来自分类Dev

如何获取管道中第一个命令的退出状态?

来自分类Dev

在Linux中查找并执行命令。是否可以通过管道2查找和执行命令

来自分类Dev

如何通过执行错误的Shell命令恢复卡住状态?

来自分类Dev

通过ssh发送到主机的命令的返回状态

来自分类Dev

如何通过管道输出命令的标准输出,具体取决于退出代码的结果

Related 相关文章

热门标签

归档