Ошибочный код возврата сценария удара не является значением, которое я отправляю

Я тестирую коды ошибок сценариев удара с простой проверкой конфигурации nginx:

верификатор

#!/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

Я должен пропускать что-то простое, кто-либо видит его?

2
задан 24 May 2018 в 18:46

1 ответ

$? всегда код выхода последней команды. В Вашем примере это - вероятно, регистрация if.

Необходимо установить переменную на код выхода и использование что:

#!/bin/bash

./verifier
RESULT=$?
if [ $RESULT -eq 0 ]; then
  echo ok!
else
  echo Error code: $RESULT
fi
2
ответ дан 2 December 2019 в 03:32

Другие вопросы по тегам:

Похожие вопросы: