Подоболочка не распространяет ошибку, bash 4.4

Решение заключалось в использовании бесплатных драйверов, которые я переключу на не -бесплатные после установки

3
06.10.2020, 14:09
1 ответ

Контраст:

$ bash -e -c 'export a=$(false); echo >&2 "If you see this, the previous command succeeded"'
If you see this, the previous command succeeded
$ bash -e -c 'a=$(false); echo >&2 "If you see this, the previous command succeeded"' 

В вашей попытке команда внутри подстановки команд завершилась неудачно, но команда , содержащая подстановку команд, выполнена успешно. Статус подстановки команды не влияет на статус содержащей команды, если это обычная команда, включая вызов встроенной команды export. Статус подстановки команды имеет значение только в том случае, если она находится в назначении :статус команды назначения — это статус последней подстановки команды в команде или 0, если подстановки команды нет (при условии отсутствия ошибки в самом присваивании, например при попытке присвоить переменную )только для чтения -.

Чтобы ваш скрипт останавливался при первой ошибке, вам нужно включитьinherit_errexitи поместить каждую подстановку команд в отдельное назначение. Это должно быть простое назначение. :экспорт переменной должен быть отдельной командой.

$ bash -e -O inherit_errexit -c 'export a=$(false; echo >&2 "If you see this, errexit is off inside command substitution"); echo >&2 "If you see this, the previous command succeeded"'
If you see this, the previous command succeeded
$ bash -e -O inherit_errexit -c 'a=$(false; echo >&2 "If you see this, errexit is off inside command substitution"); echo >&2 "If you see this, the previous command succeeded"'
7
18.03.2021, 22:59

Теги

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