【发布时间】:2019-07-19 20:59:45
【问题描述】:
假设我的 bash 脚本中有一行 ssh bad@location "find -name 'fruit.txt' | grep "Apple",我正在尝试检索 ssh、find . -name 'fruit.txt' 和 "grep "Apple` 的退出代码,以查看哪个命令出错。
到目前为止,我已经尝试过类似echo $? ${PIPESTATUS[0]} ${PIPESTATUS[1]} 的方法,但在这种情况下,$? 的返回值与${PIPESTATUS[0]} 相同。我只需要返回第一个非零退出代码以及 dmesg 以进行调试。
我也考虑过使用set -o pipefail,如果有任何命令错误,它将返回失败退出代码,但我想知道哪个命令调试失败。
我想获得 255 的退出代码(来自 ssh)及其对应的 dmesg,或者以某种方式获得所有退出代码。
【问题讨论】:
-
运行
ssh bad@location "find -name 'fruit'"时,从调用ssh的进程来看,只有一个退出状态——find返回给ssh,然后ssh返回给调用者. -
@CharlesDuffy,感谢您的提示!我不知道。
-
@AmandaNguyen :您在帖子中声明的管道有两个进程,
ssh和grep。 PIPESTATUS[0] 与ssh的退出代码相关,PIPESTATUS[1] 与grep的退出代码相关。
标签: bash