Команда, которая может возвращать код ошибки в .bashrc

в отличие от FAT файловые системы, используемые UNIX, не имеют специального ограничения на размер корневого каталога, но как только раздел будет заполнен, вы не сможете добавить более.

3
10.06.2017, 00:51
2 ответа

Как сказал l0b0 , маловероятно, что ваш .bashrc будет работать с набором errexit, но вы можете позаботиться об этой ситуации, протестировав:

case $SHELLOPTS in
  (*errexit*)   set +e;
                export MYVAR=$(my_dubious_command 2>/dev/null);
                set -e
                ;;
  (*)           export MYVAR=$(my_dubious_command 2>/dev/null)
                ;;
esac

Команда export в том виде, в котором она написана, должна возвращать 0 на случай, если любые последующие команды будут проверять $?; вы не предоставляете ему какие-либо недопустимые параметры, имя переменной является допустимым, и вы не экспортируете несуществующую функцию.

Оператор case проверяет, установлен ли errexit; если это так, он временно отключает его, чтобы запустить my_dubious_command.

2
27.01.2020, 21:15

Попробуем:

$ var=$(false)
$ echo $?
1
$

Однако маловероятно, что у вас установлен errexitв вашем.bashrc, и еще менее вероятно, что следующая команда проверит код выхода вашей команды, так что очень маловероятно, что это на что-то повлияет.

Сценарии запуска, такие как.bashrc, — это то место, где вы не хотите set -o errexit, потому что вы можете быть заблокированы из оболочки из-за простой опечатки или изменений, которые вы не контролируете. Чтобы обнаруживать, но не сбой из-за ошибок, вы можете, например, перехватывать их:

$ trap 'echo $?' ERR
$ var=$(false)
1
$

Это весьма полезно, например, в подсказке .

3
27.01.2020, 21:15

Теги

Похожие вопросы