sh -e:从" else"收集命令的退出状态。 if的分支

时间:2018-03-13 16:56:10

标签: bash sh

我们正在编写使用set -e作为策略的shell脚本,这意味着如果出现任何未处理的非零退出状态,它将退出。

#!/bin/sh -e

if some_command; then
  experience_happyness
else
  print error status of some_command to log or standard error
  experience_sadness
  exit 1
fi

$?表达式在else分支的开头评估为0。如果我不在some_command内运行if,那么最终的错误会立即终止shell脚本。

如果set -e生效而不终止脚本,我如何知道程序的退出状态?

如果没有纯bash解决方案,我也对sh特定解决方案感兴趣。

编辑:我的不好。作为@"那个其他人"当我告诉他" $?"我回答说我错了。在else分支的开头评估为0。我试过了,但是在尝试时我犯了一些错误。遗憾。

我认为我们可能会因为专业品质的答案而保留这个问题。我们应该吗?

1 个答案:

答案 0 :(得分:4)

  

$?表达式在else分支的开头计算为0。

不,它没有。

#!/bin/sh -e

some_command() { return 42; }

if some_command; then
  echo "Worked"
else
  echo "Command failed with $?"
  exit 1
fi

将打印Command failed with 42