Как проверять код через pre-commit
Настраиваем Git-хук pre-commit для автоматической проверки Bash-скриптов через ShellCheck. В качестве бонуса адаптируем тот же подход для Ansible-плейбуков и ansible-lint.
Фото: Luis Gomes / Pexels
← Все темы
Скрипты и практические примеры на Bash: автоматизация, администрирование Linux и DevOps-подходы к работе с инфраструктурой.
Настраиваем Git-хук pre-commit для автоматической проверки Bash-скриптов через ShellCheck. В качестве бонуса адаптируем тот же подход для Ansible-плейбуков и ansible-lint.
Добавляем в чистый Bash автоподсказки и подсветку команд с помощью BLE.sh. Затем устанавливаем oh-my-posh, подключаем темы оформления через профиль оболочки и получаем удобный терминал без Zsh.
Показываем, как утилита basenc из GNU coreutils кодирует UTF-8-текст в двоичное представление и возвращает его обратно. Разбираем параметры base2msbf, ширину вывода и байт перевода строки.
Сравниваем два бесконечных цикла Bash — с командами : и true. Объясняем одинаковый код возврата, роль пустой команды и наследие Bourne Shell, а также оцениваем читаемость обоих вариантов.
Сравниваем современную подстановку `$(command)` и устаревшие обратные кавычки в Bash. На примерах показываем проблемы вложенности, экранирования и читаемости gravemarks.
Скрываем курсор на время выполнения команды и возвращаем его перед выводом Bash prompt. Разбираем `PROMPT_COMMAND`, псевдосигнал DEBUG, `trap` и управляющие ANSI-последовательности.
Скачиваем файл без curl и wget через встроенное устройство `/dev/tcp` в Bash. Разбираем HTTP-запрос, файловый дескриптор и ограничения прямого сокетного соединения без TLS.
Решаем задачу нумерации строк одним процессом sed вместо связки из двух вызовов. Используем команду `=` и управляющие ANSI-последовательности для перемещения курсора в терминале.
Подключаем ShellCheck для статического анализа Bash-скриптов и поиска ошибок до запуска. Разбираем установку, базовую проверку, отчёты SC-кодов и интеграцию линтера с Vim и VS Code.
Ограничиваем число параллельных фоновых заданий в Bash без GNU Parallel. Скрипт использует `nproc`, `jobs`, цикл ожидания и `wait`, чтобы равномерно загрузить ядра и дождаться всех задач.
Шпаргалка по перенаправлению stdout и stderr в Bash: `>`, `>>`, `2>`, `&>`, `tee` и `|&`. Показываем, какие потоки остаются в терминале, какие попадают в файл и как меняется существующий файл.
Разбираемся с малоизвестной настройкой `set -k` в Bash, которая превращает присваивания в окружение команды независимо от их позиции. На примере `dd` показываем неожиданное поведение и способ отключить режим через `set +k`.
Bash — раздел BashDays, посвященный Bash, Shell scripting и работе в терминале Linux.
В разделе публикуются материалы по:
Здесь собраны практические примеры скриптов, приемов работы в терминале и способов автоматизации повседневных задач администратора.