Ответ вслух Senior Bash-скрипты обновлено

Надёжный bash-скрипт

Вопрос

Тебе нужно написать скрипт деплоя на bash. Какие приёмы сделают его надёжным?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

В начале set -euo pipefail, при этом помню, что -e не срабатывает в условиях и маскируется local x=$(cmd), поэтому важные шаги проверяю явно. Все переменные в двойных кавычках, обязательные параметры через ${VAR:?нужен VAR}.

Что должно прозвучать в ответе

  • `set -euo pipefail` в начале и понимание его исключений

  • Все переменные в двойных кавычках, `${VAR:?}` для обязательных

  • `trap ... EXIT` для уборки, временные файлы через `mktemp`

  • Проверка `cd ... || exit`, абсолютные пути или переход в каталог скрипта

  • Идемпотентность: повторный запуск не ломает систему

  • shellcheck в CI, логирование в stderr, понятные коды выхода

Что могут спросить следом

  • Как сделать, чтобы два деплоя не запустились одновременно?
  • Когда bash уже не подходит и пора брать Python или Go?
  • Как передать секрет в скрипт, не светя его в ps?

Разбор

В начале set -euo pipefail, при этом помню, что -e не срабатывает в условиях и маскируется local x=$(cmd), поэтому важные шаги проверяю явно. Все переменные в двойных кавычках, обязательные параметры через ${VAR:?нужен VAR}. Временные файлы только через mktemp, уборка в trap '...' EXIT. Перед опасными командами проверяю cd ... || exit 1, а каталог скрипта беру через $(dirname "$0"), а не надеюсь на текущий. Скрипт делаю идемпотентным: mkdir -p, проверка перед созданием, атомарное переключение симлинка. Чтобы не было параллельных запусков, беру блокировку flock. Логи в stderr с временем, коды выхода осмысленные. И обязательно shellcheck в CI: он ловит большую часть ловушек. Когда появляется сложная логика, JSON или больше пары сотен строк, честнее перейти на Python или Go.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.