Bash игнорирует ошибку для конкретной команды
Я использую следующие варианты
set -o pipefail
set -e
в скрипте bash, чтобы остановить выполнение при ошибке. У меня есть 100 выполнения скрипта, и я не хочу проверять код возврата скрипта.
Но для конкретного скрипта я хочу игнорировать ошибку. Как я могу это сделать ?
6 ответов:
решение:
particular_script || trueпример:
$ cat /tmp/1.sh particular_script() { false } set -e echo ein particular_script || true echo zwei particular_script echo drei $ bash /tmp/1.sh ein zwei
dreiникогда не будет напечатано.кроме того, я хочу добавить, что когда
pipefailна, для shell достаточно подумать, что вся труба имеет ненулевой код выхода когда одна из команд в трубе имеет ненулевой код завершения (сpipefailвыкл должен быть последним).$ set -o pipefail $ false | true ; echo $? 1 $ set +o pipefail $ false | true ; echo $? 0
более лаконично:
! particular_scriptС спецификация POSIX о
set -e(выделено мной):Если этот параметр включен, если простая команда не выполняется по любой из причин, перечисленных в разделе последствия ошибок оболочки или возвращает значение состояния выхода >0, и не является частью составного списка через некоторое время, до или если ключевое слово, и не является частью списка И ИЛИ ИЛИ, и не является конвейером предшествовало ! зарезервированный слово, после этого раковина немедленно выйдет.
на всякий случай, если вы хотите, чтобы ваш скрипт не останавливался, если конкретная команда не работает, и вы также хотите сохранить код ошибки неудачной команды:
код
set -e; command || EXIT_CODE=$? && true ; echo $EXIT_CODE
вместо "возврата true", вы также можете использовать утилиту" noop " или null (как указано в спецификации POSIX)
:и просто "ничего не делать". Вы сохраните несколько писем. :)#!/usr/bin/env bash set -e man nonexistentghing || : echo "It's ok.."
Я использую фрагмент ниже при работе с инструментами CLI, и я хочу знать, существует ли какой-то ресурс или нет, но меня не волнует результат.
if [ -z "$(cat no_exist 2>&1 >/dev/null)" ]; then echo "none exist actually exist!" fi
Comments