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 остается простой, но мощной, во многом благодаря его не блокирующей природе и акценту на четком синтаксисе, как показано в примерах. Коды ошибок хорошо сочетаются с функциями, позволяя модульно и наглядно управлять ошибками.
Смотрите также
- Документация Fish по условным операторам: https://fishshell.com/docs/current/language.html#conditionals
- Учебник Fish по обработке ошибок: https://fishshell.com/docs/current/tutorial.html#error-handling