Как отменить эффект set -e, который немедленно завершает bash в случае сбоя какой-либо команды?

После ввода set -e в интерактивной оболочке bash, bash немедленно завершит работу, если какая-либо команда завершится с ненулевым значением. Как я могу отменить этот эффект?


person Tianyi Cui    schedule 18.08.2010    source источник


Ответы (3)


С set +e. Да, наоборот, вы включаете параметры оболочки с помощью set - и отключаете их с помощью set +. Исторический изюм, дончанов.

person zwol    schedule 18.08.2010
comment
Большое спасибо, это одна из самых последних строк соответствующей страницы руководства (faqs.org/ docs / bashman / bashref_56.html), которую я не дочитал до конца. - person Tianyi Cui; 19.08.2010
comment
Руководство по bash огромно, это правда. (К вашему сведению, поскольку вы, кажется, новичок: щелкнуть галочку под лучшим ответом на ваш вопрос - это готово, это называется его принятием.) - person zwol; 19.08.2010
comment
А формат set [--abefhkmnptuvxBCHP] [-o option] [argument ...] действительно вводит в заблуждение. Я просто предположил, что отмена выполняется другой встроенной функцией, попробовал отключить и ничего не получил. Интересно, что в bash set и unset не противоположны, хотя, признаюсь, в настоящее время я мало знаю о программировании на bash. - person Tianyi Cui; 19.08.2010
comment
К сожалению, язык оболочки Unix (большая часть которого не относится к bash) является одним из наименее внутренне согласованных языков программирования, которые все еще широко используются сегодня. Вам придется выучить еще много этих маленьких бородавок. И я бы сказал, что это ошибка документации. - person zwol; 19.08.2010
comment
Когда я собирался сообщить об этой ошибке документации в GNU, я обнаружил, что руководство по bash, размещенное на faqs.org, последний раз обновлялось 13 ноября 2001 г. ... В текущем руководстве этой ошибки фактически нет. Но поисковая оптимизация faqs.org кажется лучше, поэтому я ввел меня в заблуждение. Тогда я сообщу об этом на faqs.org. - person Tianyi Cui; 20.08.2010
comment
исторический виноград - адский изюм! - person Heavy Gray; 06.02.2013
comment
И, наконец, несправедливое обличение Bash: одиночный дефис - это стандартный параметр командной строки оболочки POSIX, и поэтому он наиболее естественен для выполнения каких-либо действий. + похоже на -, но переход чего-то означает не как в ≠. - person Ciro Santilli 新疆再教育营六四事件ۍ 29.06.2018
comment
Баш действительно худший - person Andy Ray; 28.01.2020

Было бы неудобно использовать _1 _ / _ 2_ каждый раз, когда вы хотите его переопределить. Нашел более простое решение.

Вместо того, чтобы делать это так:

set +e
command_that_might_fail_but_we_want_to_ignore_it
set -e

сделать это можно так:

command_that_might_fail_but_we_want_to_ignore_it || true

или, если вы хотите сохранить нажатия клавиш и не возражаете немного загадочности:

command_that_might_fail_but_we_want_to_ignore_it || :

Надеюсь это поможет!

person szeryf    schedule 08.02.2013
comment
Интересно, история :, и нашла свой ответ здесь, на случай, если кому-то еще будет любопытно. - person 3cheesewheel; 23.09.2013
comment
Это применимо только в том случае, если вам не важен код возврата выполняемой команды. - person Isaac; 31.10.2017

  • Использование + вместо - приводит к отключению этих флагов.

Источник

person mhitza    schedule 18.08.2010