Kev*_*ner 3 bash shell-script exit exit-status
我有一个脚本(run-docker-container.sh)调用另一个脚本(create-docker-container.sh)。create-docker-container 针对 docker 远程 api 执行curl 脚本并返回 http 代码,如果成功则返回零。创建脚本因此返回
echo $RVAL
exit $RVAL
Run Code Online (Sandbox Code Playgroud)
在我的测试中, $RVAL 的值为 404,这是我对这个问题感兴趣的值。
在我的 run-docker-container 脚本中,我有以下几行
create-docker-container.sh $CONTAINER_NAME $CONTAINER_SETTINGS
rval=$?
echo $rval
if [ $rval -eq 404 ]; then
...
fi
Run Code Online (Sandbox Code Playgroud)
尽管 create 似乎以 404 退出,但我得到的值$?是 148,因此我的条件处理没有被调用。为什么会这样以及如何正确从脚本中获取退出代码?
由于历史原因,进程的退出状态是一个 8 位数字。您传递给的数字exit以 256 为模减少 (2\xe2\x81\xb8)。
此外,值 126 及以上具有常规含义,表示启动程序失败(126 或 127)或被信号终止的程序(128 及以上)。因此,虽然您可以返回此类值,但除非您想模拟这些条件,否则不应该返回此类值。
\n\n规则是返回 0 表示成功,返回一些其他值来指示错误。这是一条规则,因为许多工具将 0 解释为成功:条件命令(例如if和 )while、出现错误时中止的工具(例如set -e和 makefile 下的 shell 脚本等)。
关于错误,最常见的约定是在任何错误时返回 1,或在任何错误时返回 2。第三个最常见的约定是在预期失败时返回 1(例如,搜索命令什么也没找到),在意外失败时返回 2(例如,要搜索的文件不存在)。如果您需要将 HTTP 错误代码映射到退出状态,则可以使用范围 1\xe2\x80\x93125(200 成功映射到 0),对此没有标准。
\n