Я тестирую коды ошибок сценариев удара с простой проверкой конфигурации 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
Я должен пропускать что-то простое, кто-либо видит его?
$?
всегда код выхода последней команды. В Вашем примере это - вероятно, регистрация if
.
Необходимо установить переменную на код выхода и использование что:
#!/bin/bash
./verifier
RESULT=$?
if [ $RESULT -eq 0 ]; then
echo ok!
else
echo Error code: $RESULT
fi