Repolode
mvdan

mvdan/sh

Библиотека на Go и CLI shfmt для разбора, форматирования и выполнения shell-скриптов на POSIX, Bash, Zsh и mksh.

Звёзды
9,182
Форки
465
Открытые issues
78
Последний коммит
4 дня назад

Что это?

mvdan/sh — парсер, форматтер и интерпретатор shell-скриптов, написанный на чистом Go. Он поддерживает синтаксис POSIX Shell, Bash, Zsh и mksh и разбирает скрипты в синтаксическое дерево, которое можно анализировать и программно изменять.

В проект входит консольный форматтер shfmt: он приводит shell-скрипты к единому стилю и может перезаписывать файлы на месте. Пакеты доступны для многих дистрибутивов Linux, Homebrew, Scoop, Docker и PyPI. Для VS Code, Emacs, Vim и других редакторов есть плагины-обёртки.

Помимо форматирования, пакет shell содержит функции для разделения командных строк, подстановки переменных и тильд, а также сопоставления с glob-шаблонами. Пакет interp позволяет запускать скрипты на Go без системной оболочки, в том числе в Windows. Вместо реальных процессов для подшеллов используются горутины.

Ключевые возможности

  • 01Разбирает скрипты на POSIX, Bash, Zsh и mksh в синтаксическое дерево.
  • 02Форматирует shell-скрипты с помощью CLI shfmt, в том числе перезаписывает файлы на месте.
  • 03Запускает скрипты на Go без системной оболочки, в том числе в Windows.
  • 04Предоставляет функции для разделения командных строк, экранирования, подстановки переменных и сопоставления с glob-шаблонами.
  • 05Поставляется в виде образа Docker и пакетов для многих операционных систем.

Сценарии использования

  • Поддержание единого стиля shell-скриптов в командном репозитории с помощью CI или pre-commit.
  • Создание инструментов на Go для программного анализа и изменения shell-скриптов.
  • Встраивание изолированного интерпретатора shell в приложение на Go.
  • Форматирование shell-кода в редакторах с помощью существующих плагинов shfmt.

Быстрый старт

  1. 1

    Установить CLI shfmt с помощью Go

    go install mvdan.cc/sh/v3/cmd/shfmt@latest
  2. 2

    Отформатировать shell-скрипт на месте

    shfmt -l -w script.sh

Что важно знать

  • Для установки из исходного кода требуется Go 1.26 или новее.
  • Подоболочки выполняются в goroutine, поэтому интерпретатору недоступны реальные PID и файловые дескрипторы.
  • Неоднозначность между `$((` и `((` не поддерживается.

В подборках

Темы

Частые вопросы

Что такое sh?
Библиотека на Go и CLI shfmt для разбора, форматирования и выполнения shell-скриптов на POSIX, Bash, Zsh и mksh. mvdan/sh — парсер, форматтер и интерпретатор shell-скриптов, написанный на чистом Go. Он поддерживает синтаксис POSIX Shell, Bash, Zsh и mksh и разбирает скрипты в синтаксическое дерево, которое можно анализировать и программно изменять.
sh можно использовать бесплатно? Какая у него лицензия?
sh распространяется с открытым исходным кодом под лицензией BSD-3-Clause. Перед использованием в коммерческих продуктах проверьте условия лицензии.
sh всё ещё поддерживается?
Активно поддерживается. Последний коммит в sh — 3 нояб. 2026 г..
Для чего можно использовать sh?
Поддержание единого стиля shell-скриптов в командном репозитории с помощью CI или pre-commit. Создание инструментов на Go для программного анализа и изменения shell-скриптов. Встраивание изолированного интерпретатора shell в приложение на Go. Форматирование shell-кода в редакторах с помощью существующих плагинов shfmt.
Как установить sh?
Установить CLI shfmt с помощью Go: go install mvdan.cc/sh/v3/cmd/shfmt@latest Отформатировать shell-скрипт на месте: shfmt -l -w script.sh
Где скачать sh?
Исходный код и инструкции по установке — на GitHub: https://github.com/mvdan/sh

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты

Замена стандартной истории команд оболочки: сохраняет команды в SQLite вместе с контекстом, например кодом завершения и длительностью, и при желании синхронизирует их между машинами со сквозным шифрованием.

32,2 тыс.+77 за неделю1 тыс.RustMITАктивно поддерживаетсяОбновлён вчера