Рейтинг:4

Как скрыть вывод первой команды при использовании || оператор и выйти?

флаг cn

Это скрывает вывод первой команды и печатает Упс в stderr, если это не удается. Все идет нормально.

#!/usr/bin/env bash
неверная_команда > /dev/null 2>&1 || >&2 эхо "Упс"
эхо привет

Это выводит это:

Упс
Привет

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

#!/usr/bin/env bash
неверная_команда > /dev/null 2>&1 || ( >&2 эхо "Упс" ; выход )
эхо привет

Вот результат этого:

Упс
Привет

Но теперь выход не работает, потому что он делает это в подоболочке, заставляя его печатать Привет, хотя я хотел, чтобы скрипт завершился.

Итак, как мне заставить Bash эхо некоторый текст и выйти, если определенная команда не удалась с помощью || оператор? Я знаю, что могу использовать если однострочный, чтобы сделать это, но я бы предпочел не использовать полный если заявление, если я могу избежать этого.

#!/usr/bin/env bash
if [ "$(invalid_command > /dev/null 2>&1 ; printf $?)" != "0" ]; затем >&2 эхо 'Oops' ; выход 1; фи
флаг cn
`[` — это команда, которая оценивает выражение и соответствующим образом устанавливает свой собственный код выхода, который затем используется оператором `if`. Вы также можете написать `if ! invalid_command >/dev/null 2>&1; затем эхо >&2 выход; фи`.
Рейтинг:9
флаг sd

Использовать группировка команд (обратите внимание на ; в конце выход).

#!/usr/bin/env bash
неверная_команда > /dev/null 2>&1 || { >&2 эхо "Ой" ; выход; }
эхо привет

Верните это на мой терминал.

$ ./test.sh 
Упс

Если у вас много команд, вы можете перехватывать все ошибки.

#!/usr/bin/env bash
on_error() {
    >&2 эхо "Упс"
    выход 1
}
ловушка 'on_error' ERR
неверная_команда > /dev/null 2>&1
эхо привет

Это напечатает Упс и немедленно выйти, если какая-либо команда в сценарии не удалась.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.