O código de retorno de erro do script bash não é o valor que envio

2

Estou testando códigos de erro de scripts bash com uma verificação simples de configuração do nginx:

verificador

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

Então eu tenho o script de chamada que chama o script para verificar se houve um erro:

chamador

#!/bin/bash

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

Então, quando executo ./caller e há um erro de configuração do nginx, ele sempre imprime o código de erro 1 em vez de 2:

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

Eu devo estar perdendo algo simples, alguém pode ver isso?

    
por NaturalBornCamper 24.05.2018 / 17:46

1 resposta

2

$? é sempre o código de saída do último comando. No seu exemplo, este é provavelmente o cheque em if .

Você precisa definir uma variável para o código de saída e usá-la:

#!/bin/bash

./verifier
RESULT=$?
if [ $RESULT -eq 0 ]; then
  echo ok!
else
  echo Error code: $RESULT
fi
    
por Lienhart Woitok 24.05.2018 / 18:05