7

Я пишу функцию оболочки, которая будет вызываться из разных мест, и я хочу игнорировать все ошибки, возникающие внутри функции, отключая (возможно, включенную) опцию оболочки set -e , выполняя set +e .

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

Итак, как мне узнать, установлен он или нет? Есть ли способ игнорировать ошибки всех команд внутри функции оболочки, игнорируя опцию -e оболочки, если она установлена?

2 ответа2

15

Посмотрите на значение $ -, если оно содержит 'e', то опция '-e' установлена. Эта переменная содержит список всех установленных опций. Это описано на странице руководства bash.

1

Мне нравятся оба ответа. Предложение Ансгара хорошо работает с bash, предложение Тревора хорошо, если grep находится в PATH. Если вы хотите быть независимым от оболочки (bash/sh) и PATH, вы можете использовать

[ "${-#*e}" != "$-" ]

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .