Короткие заметки о bash, zsh и автоматизации рутины.

set -euo pipefail — и почему его недостаточно

Строгий режим ловит не всё: ошибки внутри подстановки команд и в условиях if проходят молча. Разбираем, где он помогает, а где нужен явный контроль.

out=$(may_fail) || { echo "may_fail: $?" >&2; exit 1; }

Массивы в zsh и bash ведут себя по-разному

zsh не разбивает переменную на слова без явного флага, bash разбивает. Один и тот же цикл даёт разный результат, если не использовать массивы.

names=(alpha beta gamma)
for n in "${names[@]}"; do echo "$n"; done

Ждать условия без sleep в цикле

Вместо фиксированных пауз — until с короткой проверкой и общим таймаутом. Скрипт заканчивается сразу, как только условие выполнено.

timeout 120 bash -c 'until curl -sf localhost:8080/health; do sleep 2; done'

trap для уборки временных файлов

Один trap на EXIT убирает за скриптом всё, что он создал, даже если он упал посередине.