Всем привет кого не видел и новеньким. Нас тут уже овер 10к единомышленников, растем!
Вопрос из зала — я бывший java разработчик, подался в девопсы, теперь неспешно изучаю bash. Подскажите, если какая-то альтернатива конструкции try/catch?
Начнем с того, что бывших разработчиков не бывает. Даже если ты выйдешь из айти и начнешь ловить крабов, айти не выйдет из тебя. Проверено многолетним опытом и не только моим.
Ну а по делу, try/catch в bash — нет. На этом можно было бы и закончить, но увы... давай обсудим.
Аналогичного поведения можно добиться используя логический оператор ||.
Например:
На практике это выглядит так:
А если false заменить на true, но сработает try и в терминале ничего не отобразится. Бесподобно.
Итоговая конструкция будет такой:
Вообще это больше относится к костылям и подобное можно реализовать с таким же успехом на IF’ах. А можно банально проверять статус выхода, если > 0 то кирдык.
Я такие конструкции не использую, максимум втыкаю в начала скрипта set -e. Если статус команды будет > 0, то немедленно всё выпадет в осадок.
Тут нет правильных и неправильных решений. Как говорится если работает, то уже хорошо. Остальное детали.
Если есть чего добавить, велком в комментарии. Возможно у тебя есть секретный модуль для bash с try/catch.
tags: #linux #bash
—
💩 @bashdays
Вопрос из зала — я бывший java разработчик, подался в девопсы, теперь неспешно изучаю bash. Подскажите, если какая-то альтернатива конструкции try/catch?
Начнем с того, что бывших разработчиков не бывает. Даже если ты выйдешь из айти и начнешь ловить крабов, айти не выйдет из тебя. Проверено многолетним опытом и не только моим.
Ну а по делу, try/catch в bash — нет. На этом можно было бы и закончить, но увы... давай обсудим.
Аналогичного поведения можно добиться используя логический оператор ||.
Например:
command1 || command2Если первая команда вывалит ошибку, то отработает вторая команда. Ну чем не try/catch, Даже лучше! Правда концепция работы не такая как в других языках.
На практике это выглядит так:
false || echo "error, returned false"Сейчас сработает catch и выведет «error, returned false», так как команда false всегда возвращает ошибку. Статус: exit 1.
А если false заменить на true, но сработает try и в терминале ничего не отобразится. Бесподобно.
Итоговая конструкция будет такой:
#!/bin/bashДля catch можно сделать отдельную функцию. Которая будет автоматически включать режим дебага (sex -x) либо какие-то другие свистоперделки для отладки.
{ # try
echo "hello bashdays"
false
} || { # catch
echo "error, returned false"
}
Вообще это больше относится к костылям и подобное можно реализовать с таким же успехом на IF’ах. А можно банально проверять статус выхода, если > 0 то кирдык.
Я такие конструкции не использую, максимум втыкаю в начала скрипта set -e. Если статус команды будет > 0, то немедленно всё выпадет в осадок.
Тут нет правильных и неправильных решений. Как говорится если работает, то уже хорошо. Остальное детали.
Если есть чего добавить, велком в комментарии. Возможно у тебя есть секретный модуль для bash с try/catch.
tags: #linux #bash
—