Если для работы функции оболочки требуется определенный параметр -e / + e, возможно ли установить этот параметр локально, а затем восстановить его до предыдущего значения перед выходом из функции?
myfunction()
{
# Query here if -e is set and remember in a variable?
# Or push the settings to then pop at the end of the function?
set +e
dosomething
doanotherthing
# Restore -e/+e as appropriate, don't just do unconditional set -e
}
bash
shell-script
USTA
источник
источник
$-
также работает,/bin/sh
и вам, вероятно, не нужны bashisms для его анализа, просто используйте, например, globbing, которыйcase
обеспечиваетВы можете прочитать значение флага через переменную SHELLOPTS:
Вы видите, что после настройки появляется
set -e
значениеerrexit
в$SHELLOPTS
. Вы можете проверить это оттуда.Тем не менее, вы можете обойти это (если хотите!), Помня следующий пункт: согласно Руководству :
Таким образом, если вы выполняете свою функцию в подоболочке, как
вам не нужно беспокоиться о том,
errexit
установлена ли переменная в вызывающей среде или нет, и вы можете установить ее, как вам нравится.источник
myfunction
вызовы на,myfunction || true
чтобы подавить эффект -e для вызовов, иset +e
в первую очередь не пришлось бы делать это внутри функции.