Fornece o valor padrão se o comando retornar com código de saída diferente de zero

4

Eu tenho alguma configuração no arquivo config e gostaria de cat desse arquivo. No entanto, às vezes, config não existe. Neste caso, gostaria que meu comando emitisse um valor padrão.

Talvez algo que funcione assim:

$ ls
$ cat config || echo 42
42
$ echo 73 > config
$ cat config || echo 42
73
    
por Cory Klein 12.02.2016 / 17:59

4 respostas

2

Sua construção está bem. Você poderia até fazer algo como

cat config || cat defaultconfig

Se você usar algum comando aleatório (como ./get_config_from_web nos comentários), terá que garantir que o comando forneça um status de retorno sensato. Isso pode ser complicado, shell scripts apenas retornam o resultado do último comando executado, você teria que fazer um exit se você quer algo mais como resultado.

    
por 12.02.2016 / 19:06
2

O seguinte ecoará 42 para qualquer condição de erro não interceptado:

trap "echo 42" ERR

Você pode tornar isso uma variável configurável:

trap 'echo "${CONFIG:=42}"' ERR  # if $CONFIG is not set, it will be defaulted to 42
    
por 12.02.2016 / 18:38
0
if [ -a config ]; then cat config; else echo ${DEFAULT};fi

assumindo que a variável DEFAULT está definida para algo de antemão.

    
por 12.02.2016 / 18:17
0

Você pode usar o código de saída em uma declaração if:

#!/bin/bash
cat config
if [[ "$?" -ne "0" ]]; then
    echo "VALUE"
fi

Se o comando anterior for bem sucedido, sairá com um valor "0". Então você está dizendo que em qualquer outra saída (falhas) ele irá mostrar o que está em "VALUE".

    
por 12.02.2016 / 19:08