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