ShellCheck
Тема дорожной карты · Bash
ShellCheck — инструмент статического анализа с открытым исходным кодом для shell-скриптов, который выявляет ошибки, проблемы совместимости с POSIX и стилистические нарушения в Bash и других POSIX shell-скриптах до того, как они вызовут сбои в производственных средах Linux. Запуск shellcheck script.sh в терминале или интеграция ShellCheck в CI-конвейер обнаруживает распространённые ошибки написания Bash-скриптов: нераскавыченные переменные, некорректное разбиение слов, использование устаревшего синтаксиса и логические ошибки, которые трудно обнаружить при ручной проверке. ShellCheck аннотирует каждое предупреждение идентификатором правила (например, SC2086 для нераскавыченного расширения переменных) и ссылается на подробную страницу вики с объяснением проблемы и правильным исправлением, что делает его одновременно линтером и образовательным инструментом для изучения рекомендуемых практик написания shell-скриптов. Он поддерживает Bash, sh, dash и ksh и может быть настроен с помощью встроенных директив (# shellcheck disable=SC2034) или файла .shellcheckrc для подавления ложных срабатываний. Использование ShellCheck считается неотъемлемой частью любого профессионального рабочего процесса с Bash и автоматизацией Linux, и многие команды применяют его как обязательный pre-commit или шлюз в CI.
Как это работает
ShellCheck: set -x трейсит каждую команду до исполнения (пара set +x для отключения); bash -x script.sh — глобально с трейсом. PS4="+ \${BASH_SOURCE}:\${LINENO}: " делает trace-вывод с файлом + строкой. set -v печатает команды при чтении (полезнее -x). Для глубокой отладки: bashdb (gdb-style debugger) или стратегические echo. Shellcheck (статический анализатор) ловит большинство багов до рантайма.
Когда применять
Shellcheck — на каждый скрипт; ловит 90% распространённых багов (незакавыченные vars, useless cat, sed-измы и т.д.). set -x — вокруг отлаживаемой секции, не глобально (объём вывода огромный). Добавьте --debug флаг в скрипты, выборочно включающий set -x.
Типичные ошибки
Ловушки ShellCheck: трейс через set -x даёт слишком много вывода (фокусируйте); игнор shellcheck-предупреждений ("стиль" — на самом деле тонкие баги); не тестируете на целевой среде (ваш zsh-аливасный Mac не production Ubuntu).