Суть - проверить скрипт на ошибки, до запуска.
Перед запуском скрипта, добавь флаг -n и оно тебе скажет, накосячил ты или нет.
Конечно коробочный вариант не такой гибкий как shellchek, но зато ничего не нужно устанавливать лишнего. Это как nginx -t перед его ребутом. Зачем ставить что-то внешнее, если это уже предусмотрено в самой программе. Ну только если расширить функционал и получить больше плюшек.
А если работаешь с гитом, можешь сделать pre-hook и гавно в репу уже не улетит (но если постараешься, то улетит):
bashErr=$(find src/ -type f -name '*.sh' -exec bash -n {} \; 2>&1 > /dev/null)
if [ -n "$bashErr" ]; then
echo "$bashErr"
exit 1
fiПосле запуска этого хука проверяются все * .sh скрипты в папке src. Пример скрипта с ошибкой:
echo "Hello Bashdays
exit 0
src/script.sh: 7: Syntax error: Unterminated quoted string и запретит (коммитить, пушить в мастер).Нечто подобное было прикручено к puppet очень давно в одной студии, был какой-то внутренний линтер на хуке гита, но хлебнул я знатно с ним. Мне пушить, а он на какие-то фантомные пробелы орет падла. Короче как только встал у руля, избавился и от этого вонючего паппета, от хуков и от команды.
Ну или как вариант можно включать set -u, например если переменную не объявил и попытался где-то её использовать.
set -u включает режим обработки неустановленных переменных (также известный как режим nounset). Когда этот режим включен, обращение к неустановленной переменной приведет к ошибке выполнения скрипта.
set -u
echo "Переменная VAR: $VAR"
./script.sh: line 3: VAR: unbound variable
Или так:
set -o noexec
Включает режим noexec (режим «нет выполнения»). Когда этот режим включен, скрипт не будет выполняться, а только проверяться на синтаксические ошибки. В общем много вариантов есть, чтобы проверить не запуская.
А завтра кстати внеплановая пятница! Ждем ждем…
tags: #bash
—
💩 @bashdays