bash脚本的错误返回代码不是我发送的值

bash脚本的错误返回代码不是我发送的值

我正在使用简单的 nginx 配置检查来测试 bash 脚本错误代码:

验证者

#!/bin/bash

# Error codes
ERROR_INVALID_NGINX_CONFIG=2

function validate() {
  if [ $1 -eq 0 ]; then
    echo OK
  else
    echo Invalid config
    exit $2
  fi
}

sudo nginx -t
validate $? $ERROR_INVALID_NGINX_CONFIG

然后我让调用者脚本调用该脚本来检查是否有错误:

呼叫者

#!/bin/bash

./verifier
if [ $? -eq 0 ]; then
  echo ok!
else
  echo Error code: $?
fi

然后,当我执行./caller并且出现 nginx 配置错误时,它总是打印错误代码 1 而不是 2:

nginx: configuration file /etc/nginx/nginx.conf test failed
Invalid config
Error code: 1

我肯定遗漏了一些简单的东西,有人能看到吗?

答案1

$?始终是最后一个命令的退出代码。在您的示例中,这可能是签入if

您需要将变量设置为退出代码并使用该变量:

#!/bin/bash

./verifier
RESULT=$?
if [ $RESULT -eq 0 ]; then
  echo ok!
else
  echo Error code: $RESULT
fi

相关内容