Como se pode extrair o código de saída de um comando? [duplicado]

8

Como se pode extrair o código de saída de um comando e usá-lo em uma condição? Por exemplo, observe o seguinte script:

i=4
if [[ $i -eq 4 && $(command) -eq 0 ]]
    then
            echo "OK"
    else
            echo "KO"
    fi

Se ambas as condições forem satisfeitas, o script deve fazer alguma coisa. Na segunda condição, preciso verificar o status de saída (e não a saída do comando, como é o caso do script fornecido acima), para saber se o comando foi bem-sucedido ou não.

    
por intore 15.02.2018 / 17:23

3 respostas

20
if [ "$i" -eq 4 ] && command1; then
   echo 'All is well'
else
   echo 'i is not 4, or command1 returned non-zero'
fi

Com $(command) -eq 0 (como em seu código), você testa a saída de command em vez de seu código de saída.

Observação: usei command1 em vez de command , pois command é o nome de um utilitário padrão.

    
por 15.02.2018 / 17:29
9

$(somecmd) captura a saída de somecmd , se você quiser verificar o código de saída de um comando, basta colocá-lo na parte de condição da instrução if diretamente

i=4
if [[ $i -eq 4 ]] && false ; then
     echo this will not print
fi
if [[ $i -eq 4 ]] && true ; then
     echo this will print
fi
    
por 15.02.2018 / 17:30
3

Para capturar o código de saída, use $? depois (imediatamente, antes de executar qualquer outro comando) executando o comando. Então você pode fazer coisas como

ls /proc/$PPID/fd
ls=$?
if test $ls != 0; then
  echo "foo failed"
  if test $ls = 2; then
    echo "  quite badly at that"
  fi
fi

Ou seja. você pode avaliar expressões envolvendo o código de saída várias vezes.

    
por 16.02.2018 / 05:19