
У меня есть некоторая конфигурация в файле config
, и я хотел бы, чтобы cat
этот файл. Однако иногда config
его не существует. В этом случае я хотел бы, чтобы моя команда выводила значение по умолчанию.
Возможно, что-то сработало примерно так:
$ ls
$ cat config || echo 42
42
$ echo 73 > config
$ cat config || echo 42
73
решение1
Ваша конструкция хороша. Вы даже могли бы сделать что-то вроде
cat config || cat defaultconfig
Если вы используете какую-то случайную команду (вроде ./get_config_from_web
в комментариях), вам придется убедиться, что команда возвращает разумный статус возврата. Это может быть сложно, скрипты оболочки просто возвращают результат последней выполненной команды, вам придется сделать a, exit
если вы хотите получить что-то другое в качестве результата.
решение2
Следующий код выведет код 42 для любого неперехваченного состояния ошибки:
trap "echo 42" ERR
Вы можете сделать это настраиваемой переменной:
trap 'echo "${CONFIG:=42}"' ERR # if $CONFIG is not set, it will be defaulted to 42
решение3
if [ -a config ]; then cat config; else echo ${DEFAULT};fi
при условии, что переменная DEFAULT заранее установлена на какое-то значение.
решение4
Вы можете использовать код выхода в операторе if:
#!/bin/bash
cat config
if [[ "$?" -ne "0" ]]; then
echo "VALUE"
fi
Если предыдущая команда будет выполнена успешно, она выйдет со значением "0". Таким образом, вы сообщаете ей, что при любом другом выходе (неудачах) она выведет то, что находится в "VALUE".