Bash: как обнаружить ошибку в трубе - PullRequest
3 голосов
/ 27 августа 2011

У меня есть такие команды:

COMMAND1 &&
COMMAND2 | COMMAND3 | COMMAND4 &&
COMMAND5

Я хочу убедиться, что все КОМАНДЫ 1-5 успешны. Есть ли простой способ добиться этого? Проведя исследование, я обнаружил, что PIPESTATUS можно использовать, но уступить некоторым очень сложным командам, таким как

COMMAND1 &&
COMMAND2 | COMMAND3 | COMMAND4 &&
($PST=("${PIPESTATUS[@]}") && (exit ${PST[0]}) && (exit ${PST[1]})) &&
COMMAND5

Есть ли способ сделать это легко?

Кстати: я использовал (выход n), чтобы получить команду, которая ничего не делает, кроме выхода со статусом n. Есть ли команда UNIX, которая делает это напрямую, как истина и ложь?

Спасибо.

1 Ответ

8 голосов
/ 27 августа 2011

Попробуйте использовать set -o pipefail.Это гарантирует, что код ошибки конвейера является кодом ошибки последнего процесса с ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...