Ответ
Директива set -e (или set -o errexit) предписывает оболочке немедленно завершить выполнение скрипта, если любая команда завершится с ненулевым статусом (т.е. с ошибкой). Это критически важно для скриптов автоматизации в DevOps, чтобы предотвратить выполнение последующих команд в некорректном состоянии системы.
Пример:
#!/bin/bash
set -e # Скрипт завершится на первой же ошибке
# Если эта команда упадет, скрипт остановится, и деплой не начнется
terraform apply -auto-approve
# Эта строка не выполнится в случае ошибки выше
ansible-playbook deploy.yml
Важные нюансы:
set -eне срабатывает для команд в конвейерах (например,cmd1 | cmd2), если только не установлен такжеset -o pipefail.- Ошибки в условиях (например, в
ifилиwhile) игнорируются. - Её можно временно отключить для блока кода:
set +e...set -e.
В продакшн-скриптах я обычно комбинирую set -euo pipefail для строгого режима: выход при ошибках, неопределённых переменных и ошибках в конвейерах.