Как форматировать программы оболочки с помощью Shfmt в Linux
В этом руководстве мы обсудим, что такое Shfmt, как установить Shfmt в Linux и, наконец, как форматировать программы оболочки с помощью Shfmt в Linux.
1. Введение
Если вы имеете опыт программирования, возможно, вы знакомы с такими терминами, как форматирование, линтинг и т. д.
В каждом редакторе кода есть важные вспомогательные инструменты, которые облегчают нам жизнь во время написания кода.
Аналогично, для сценариев оболочки у нас есть shfmt. shfmt используется для форматирования, анализа и интерпретации сценариев оболочки. Shfmt поддерживает оболочки Bash, mksh и Posix.
Shfmt обладает широкими возможностями настройки и может форматировать ваш код различными способами и соглашениями.
Вы можете установить и использовать инструмент Shfmt из командной строки для работы со сценариями оболочки. Также в популярных текстовых редакторах доступны плагины, которые будут использовать shfmt для форматирования ваших сценариев оболочки.
2. Установите Shfmt в Linux.
Shfmt доступен в виде приложения Snap. Если в вашем дистрибутиве установлен Snap, вы можете установить shfmt с помощью команды:
sudo snap install shfmt
Другой способ установить Shfmt — использовать следующую однострочную команду:
curl -sS https://webinstall.dev/shfmt | bash
Два вышеуказанных метода можно использовать независимо от того, какой дистрибутив вы используете. Существует несколько дистрибутивов, в которых вы можете установить shfmt из их репозиториев пакетов.
Чтобы установить shfmt в Alpine Linux, запустите:
sudo apk add shfmt
Установите shfmt в Arch Linux, EndeavourOS и Manjaro Linux:
sudo pacman -S shfmt
Установите shfmt во FreeBSD.
sudo pkg install devel/shfmt
sudo pkg install shfmt
3. Отформатируйте программы оболочки с помощью Shfmt в Linux.
Если вы используете Shfmt впервые, начните с запуска команды help
, чтобы получить представление о том, какие параметры поддерживает shfmt:
shfmt --help
Теперь позвольте мне показать вам пример. Я создал сценарий оболочки без надлежащего форматирования.
Пример сценария
Взгляните на изображение выше. Это выглядит странно, правда?
Давайте отформатируем этот скрипт, используя shfmt
, как показано ниже:
shfmt dummy.sh
Shfmt начнет форматировать данный скрипт.
Вот результат работы приведенного выше скрипта до и после оптимизации:
Форматирование программ оболочки с помощью shfmt
Из приведенного выше вывода вы можете видеть, что наш скрипт хорошо отформатирован.
Вы можете задаться вопросом, почему отступ установлен на tab. Это значение по умолчанию и его можно изменить.
3.1. Пользовательский отступ
Я всегда следую документации по стилю сценариев оболочки Google и устанавливаю отступ 2 пробела вместо табуляции.
Чтобы установить собственный отступ, используйте флаг -i
. Давайте посмотрим, что говорит меню справки об этом флаге -i
:
Пользовательский отступ с использованием shfmt
Любое значение больше нуля передается с флагом -i
— это количество пробелов, которое будет использоваться по назначению.
shfmt -i 2 scriptname.sh
Установите отступ с помощью shfmt
3.2. Вывод в стиле сравнения
Если вам нужна информация о том, что именно было отформатировано, вы можете использовать флаг -d
. Взгляните на изображение ниже: на нем показано, что отформатировано зеленым цветом с символом +
.
Вывод в стиле сравнения
3.3. Список сценариев для форматирования
Вы можете использовать флаг -l
, который получит список скриптов, которые необходимо отформатировать.
Чтобы продемонстрировать это, я собираюсь создать три файла сценариев. Второй и третий скрипты я оставил неформатированными. И я выделил много места в операторе echo
второго и третьего файлов.
Входные скрипты
Теперь, если я запущу команду shfmt с флагом -l
, она должна выбрать только файлы второго образца 2 и 3:
$ shfmt -l sample*.sh
sample2.sh
sample3.sh
Список скриптов для форматирования
3.4. Записать вывод в файл
По умолчанию Shfmt записывает выходные данные отформатированного сценария на стандартный вывод, который является терминалом. Если вы хотите записать вывод в файл, вы можете использовать флаг -w
.
shfmt -w scriptname.sh
3.5. Найдите сценарии оболочки по пути
С флагом -f
shfmt рекурсивно просканирует заданный каталог и найдет все сценарии оболочки.
Не имеет значения, имеет ли скрипт расширение .sh
или нет. Shfmt может распознавать все сценарии оболочки, даже если они не имеют расширений.
$ shfmt -f /home/ostechnix
/home/ostechnix/.config/envman/load.sh
/home/ostechnix/.local/bin/webi
/home/ostechnix/Downloads/sampleshell
/home/ostechnix/dummy.sh
3.6. Shfmt также может обнаруживать ошибки
Shfmt предназначен не только для форматирования сценариев оболочки. Он также может обнаружить ошибки в сценариях.
Взгляните на изображение ниже: здесь отсутствуют скобки для завершения функции, и shfmt это замечает.
Shfmt может обнаруживать синтаксические ошибки в скриптах
Вы также можете использовать встроенную функцию проверки синтаксиса bash, используя флаг -n
, который проверит ваш код и
выведет список всех ошибок.
bash -vn scriptname.sh
3.7. Shfmt во внешних редакторах
В режиме реального времени вы можете использовать любой текстовый редактор по вашему выбору, например Vim, Atom, Sublime Text, Vs code и т. д. Некоторые из этих текстовых редакторов могут иметь встроенную поддержку форматирования сценариев bash.
Каждый редактор кода имеет плагин, интегрируемый с shfmt. Перейдите в официальный репозиторий GitHub (ссылка приведена в конце), и внизу страницы вы увидите список плагинов для каждого текстового редактора, использующего shfmt.
Заключение
В этом руководстве мы увидели, что такое Shfmt и как форматировать программы Shell с использованием Smfmt, на практических примерах. Shfmt будет очень полезным инструментом, позволяющим поддерживать чистоту, аккуратность и организованность ваших сценариев. Интегрируйтесь с текстовыми редакторами, и у вас будет очень удобный рабочий процесс создания сценариев.
Ресурс:
- Репозиторий Shfmt на GitHub
Связанное чтение:
- ShellCheck — бесплатная утилита для поиска ошибок в сценариях оболочки
- Исправить «ошибку формата Exec» при запуске сценариев с помощью команды run-parts
- Как запустить все сценарии в каталоге в Linux
- Как разобрать и красиво распечатать JSON с помощью инструментов командной строки Linux
Рекомендуемое изображение с сайта Pixabay.