Поиск по сайту:

Как форматировать программы оболочки с помощью 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.

Статьи по данной тематике