【问题标题】:I can not get "exit status" with "timeout comand"我无法使用“超时命令”获得“退出状态”
【发布时间】:2018-12-19 06:13:59
【问题描述】:

我希望得到“状态 124”,但使用以下代码得到了“状态 0”

timeout 10 sleep 20 | tee -a LOG_FILE LOG_FILE2
RET=$?
echo $RET

我通过使用此代码得到“状态 0”。

我希望得到“状态 124”。

这段代码发生了什么

【问题讨论】:

  • 脚本应该返回124 or 137,如果你能在终端上看到Killed消息或stderr ??
  • $?是最后一个命令的状态。即在你的情况下是发球台。
  • $? 将为您提供timeout 的返回值,我运行您的脚本并得到 137
  • 这里 tee -a 不会向 LOG_FILE LOG_FILE2 附加任何内容,因为 timeout 命令没有输出......只有你收到错误消息 Killed
  • 对不起。我错过了代码。

标签: bash unix timeout


【解决方案1】:

$? 保存最后一个管道的退出状态。使用PIPESTATUS 获取前台管道的退出状态(本例中为timeout 命令)。

$ timeout 10 sleep 20 | tee -a LOG_FILE LOG_FILE2
$ RET=${PIPESTATUS[0]}
$ echo $RET

124  # timed out

男人 bash

PIPESTATUS:一个数组变量(参见下面的数组),其中包含最近执行的前台管道(可能只包含一个命令)中进程的退出状态值列表。

【讨论】:

  • @Sh.nakayama:见echo ${PIPESTATUS[@]}declare -p PIPESTATUS
  • @Travis Clarke 非常感谢。你是对的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 2021-10-29
  • 2021-05-31
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多