Fish Shell:
Обработка ошибок

Как это сделать:

Чтобы перехватывать ошибки в Fish, используйте команду status и условия. Допустим, ping не работает; вот как это обнаружить:

ping -c 1 example.com
if not status is-success
    echo "С пингом что-то не так."
end

Пример вывода, если ping не выполняется:

С пингом что-то не так.

Чтобы обработать конкретный код ошибки, используйте status --is:

false
if status --is 1
    echo "Перехвачена ошибка с кодом 1."
end

Пример вывода:

Перехвачена ошибка с кодом 1.

Для более надежного подхода рассмотрите использование функции:

function try_ping
    ping -c 1 example.com
    or begin
        echo "Пинг не удался со статусом $status"
        return 1
    end
end

try_ping

Подробнее

Обработка ошибок в Fish не соответствует парадигме try/catch, которую вы можете знать из языков высокого уровня. Вместо этого у вас есть простые коды выхода, предоставляемые командой status.

Исторически в системах, подобных Unix, статус выхода 0 означает успех, в то время как любое ненулевое значение указывает на ошибку, что обычно отражает различные причины сбоя. Эту конвенцию используют большинство утилит командной строки и, следовательно, сам Fish.

Альтернативы проверкам статуса в Fish включают обработку сигналов через trap в других оболочках, но Fish предпочитает более явные проверки статуса, потому что это чище и менее подвержено побочным эффектам.

С точки зрения реализации, обработка ошибок в Fish остается простой, но мощной, во многом благодаря его не блокирующей природе и акценту на четком синтаксисе, как показано в примерах. Коды ошибок хорошо сочетаются с функциями, позволяя модульно и наглядно управлять ошибками.

Смотрите также