Teo*_*giu 0 shell bash shell-script exit-status
我正在 bash 脚本中测试不同的东西,但我遇到了一个无法解释的问题。
我故意写了一个错误的命令,以获得不同于 0 的退出代码,但不知何故,我似乎仍然得到 0。
我正在执行的代码是:
USER_NAME=$(id -uns)
if [[ ${?} -ne 0 ]]
then
echo "Your command failed to execute with exit code ${?}"
exit 1
fi
echo "Your username is ${USER_NAME}"
Run Code Online (Sandbox Code Playgroud)
我的代码的输出是:
id: 未知选项 -- s
尝试“id --help”以获取更多信息。
您的命令无法执行,退出代码为 0
您的用户名是
我猜它以某种方式显示了 echo 命令的退出代码?即便如此,如果退出码为0,为什么会进入if语句呢?
如果是这样,那么我怎样才能让它显示应该显示的实际退出代码?
在您的代码中,在if语句中,打印的退出状态是 test 的退出状态[[ ${?} -ne 0 ]]。该值$?始终是最近执行的命令的退出状态,并且测试算作一个命令,至少在将 的值设置$?为其结果方面如此。
如果要打印 的退出状态id,请将其分配给值不会更改的变量,
id -uns
err=$?
if [[ $err -ne 0 ]]; then
printf 'id failed with code %d\n' "$err" >&2
exit 1
fi
Run Code Online (Sandbox Code Playgroud)