В bash часто добавляют так называемый "strict mode":
set -euo pipefail
Идея простая - сделать скрипты более предсказуемыми и ловить ошибки раньше.▪️Что означает каждая опция
-e - остановить скрипт при любой ошибке команды-u - ошибка при использовании неинициализированной переменной-o pipefail - пайп считается упавшим, если упала любая команда в цепочке
▪️Что это реально улучшаетБез strict mode многие ошибки проглатываются:
rm file_not_exist
echo "continue"
Или:
echo "$UNDEFINED_VAR"
будет явная ошибка, а не пустая строка.
▪️ pipefail: скрытая проблема пайп
Без него:
cat file | grep ERROR | sort
Возвращает код последней команды, даже если grep упал.
▪️ Где начинается проблема. Strict mode ломает сценарии, где ошибка - это нормальное состояние.
Пример:
grep pattern file.txt
echo "done"
Если совпадений нет, grep возвращает 1 и скрипт завершается, хотя это не ошибка логики.
▪️ Типичный workaround
grep pattern file.txt || true
Или:
set +e
grep pattern file.txt
set -e
Но это уже
ручное управление поведением.▪️ ещё один частый кейс - test / if
set -e
if grep pattern file.txt; then
echo "found"
fi
Здесь grep
может упасть, но в контексте if это нормальный контроль потока - и это не считается фатальной ошибкой.▪️ Итоговый баланс
Strict mode хорошо работает в:
• CI/CD
• одноразовых скриптах
• автоматизации без ветвлений
Но начинает мешать в:
• парсинге данных
• поиске (grep как логика)
• скриптах с ожидаемыми "ошибками как состоянием"
Это не универсальная защита, а переключатель модели поведения Bash-скрипта: от гибкого к строго детерминированному.
BashTex 📱 #scripts #linux