Proporcione el valor predeterminado si el comando regresa con un código de salida distinto de cero

Proporcione el valor predeterminado si el comando regresa con un código de salida distinto de cero

Tengo alguna configuración en el archivo configy me gustaría catese archivo. Sin embargo, a veces configno existe. En este caso, me gustaría que mi comando genere un valor predeterminado.

Quizás algo que funcionó así:

$ ls
$ cat config || echo 42
42
$ echo 73 > config
$ cat config || echo 42
73

Respuesta1

Tu construcción está bien. Incluso podrías hacer algo como

cat config || cat defaultconfig

Si usa algún comando aleatorio (como el ./get_config_from_webde los comentarios), deberá asegurarse de que el comando proporcione un estado de retorno sensato. Eso puede ser complicado, los scripts de shell simplemente devuelven el resultado del último comando ejecutado, tendrías que hacer un exitsi quieres algo más como resultado.

Respuesta2

Lo siguiente hará eco de 42 para cualquier condición de error no detectada:

trap "echo 42" ERR

Puedes hacer de esto una variable configurable:

trap 'echo "${CONFIG:=42}"' ERR  # if $CONFIG is not set, it will be defaulted to 42

Respuesta3

if [ -a config ]; then cat config; else echo ${DEFAULT};fi

suponiendo que la variable DEFAULT esté configurada en algo de antemano.

Respuesta4

Podrías usar el código de salida en una declaración if:

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

Si el comando anterior tiene éxito, saldrá con un valor "0". Entonces le está diciendo que en cualquier otra salida (falla) generará lo que esté en el "VALOR".

información relacionada