我正在编写一个以#!/bin/sh
作为第一行的shell脚本,以便脚本在第一个错误时退出。文件中有几行以command || true
的形式存在,因此如果命令失败,脚本就不会在那里退出。但是,我仍然想知道命令的退出代码。如何在不必使用set +e
暂时禁用该行为的情况下获取退出代码?
答案 0 :(得分:5)
您的问题似乎暗示set -e
。
假设set -e
:
您可以使用command || true
代替command || exitCode=$?
。该脚本将继续,并在command
中捕获exitCode
的退出状态。
$?
是一个内部变量,用于保存最后一个命令的退出代码。
如果||
成功command
短路,请在测试之间设置exitCode=0
或改为使用:command && exitCode=0 || exitCode=$?
。
但更喜欢完全避免使用set -e
样式脚本,而是在脚本中为每个命令添加显式错误处理。
答案 1 :(得分:2)
如果您想知道命令的状态,那么可能您会根据其值采取不同的操作。在这种情况下,您的代码应该类似于:
if command; then
# do something when command succeeds
else
# do something when command fails
fi
在这种情况下,您不需要执行任何特殊操作,因为命令失败时shell不会中止。
set -e
给您带来任何问题的唯一原因是您将代码编写为:
command
if test $? = 1; ...
所以不要这样做。