Встраиваемый движок JavaScript на Rust с лексером, парсером и интерпретатором, поддерживающий значительную часть спецификации ECMAScript.
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
Установить CLI shfmt с помощью Go
go install mvdan.cc/sh/v3/cmd/shfmt@latest - 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 обновляется ежедневно.
Похожие проекты
Go-модуль для создания яркого и стилизованного вывода в консоли: прогресс-бары, таблицы, деревья, графики и интерактивные запросы.
POSIX-совместимый bash-скрипт для установки и переключения между несколькими версиями Node.js для каждого пользователя и shell.
Warp — среда разработки с агентами на базе терминала, встроенным coding agent и поддержкой собственных CLI-агентов.
Замена стандартной истории команд оболочки: сохраняет команды в SQLite вместе с контекстом, например кодом завершения и длительностью, и при желании синхронизирует их между машинами со сквозным шифрованием.
Кроссплатформенный движок тем для командной строки, который формирует настраиваемые приглашения для PowerShell, bash, zsh, fish и других оболочек.