464просмотров
48.1%от подписчиков
7 марта 2026 г.
Score: 510
Скрипты на bash и их предсказуемость Поймал себя на мысли, что многие пишут bash-скрипты как придётся. Запустили, оно вроде работает, и ладно. А потом скрипт падает в три часа ночи, потому что переменная оказалась пустой или в названии файла попался пробел. Есть вещи, которые я всегда добавляю в начало любых скриптов: #!/bin/bash set -euo pipefail ➤ Разбор полётов: - -e — скрипт умирает при первой же ошибке. Без этого флага он продолжит выполнение, даже если команда упала, и вы можете получить кашу. - -u — если переменная не объявлена, скрипт сразу падает. Без этого флага пустая переменная превратится в пустую строку и может натворить дел (например, rm -rf $UNDEFINED удалит всё, потому что команда превратится в rm -rf). - -o pipefail — если в пайпе что-то упало, весь пайп считается упавшим. Без этого флага false | true вернёт успех. ➤ Проверка аргументов. Если скрипт требует аргументы, проверяйте их сразу. if [ -z "${1:-}" ]; then echo "Ошибка: не указан конфигурационный файл" exit 1 fi ➤ Кавычки везде. Всегда, всегда, всегда берите переменные в кавычки. Если в переменной окажется пробел, без кавычек это будут два отдельных аргумента. # Плохо rm -rf $SOME_DIR # Хорошо rm -rf "$SOME_DIR" ➤ Проверка на существование. Если скрипт работает с файлами, проверяйте, что они есть. if [ ! -f "$CONFIG_FILE" ]; then echo "Файл конфигурации не найден: $CONFIG_FILE" exit 1 fi ➤ Логирование. Пишите в stdout, что происходит. Это потом спасёт при разборе инцидентов. echo "[$(date +'%Y-%m-%d %H:%M:%S')] Начинаю бэкап базы данных" Я иногда смотрю на чужие скрипты и вижу там отсутствие этих простых вещей. В итоге скрипт работает на машине автора, потому что там есть нужные файлы и переменные, но падает на чистой системе. А виноват потом "кривой линух". У вас были случаи, когда bash-скрипт падал из-за неожиданного пробела в имени файла или незаданной переменной? 🌐 @helcode
464
просмотров
1969
символов
Нет
эмодзи
Нет
медиа

Другие посты @helcode

Все посты канала →
Скрипты на bash и их предсказуемость Поймал себя на мысли, ч — @helcode | PostSniper