Repolode
mvdan

mvdan/sh

POSIX、Bash、Zsh、mkshのシェルスクリプトを解析・整形・実行できるGoライブラリとshfmt CLI。

スター
9,183
フォーク
464
未解決の Issue
78
最終コミット
4 日前

これは何?

mvdan/shは、純粋なGoで実装されたシェルパーサー、フォーマッター、インタープリターです。POSIX Shell、Bash、Zsh、mkshの構文に対応し、スクリプトを構文木に変換して、プログラムから調査・書き換えできます。

プロジェクトには、シェルスクリプトに一貫したスタイルを適用し、ファイルを直接書き換えることもできるコマンドラインフォーマッターshfmtが含まれています。多くのLinuxディストリビューション、Homebrew、Scoop、Docker、PyPI向けのパッケージが提供されており、VS Code、Emacs、Vimなどのエディタープラグインからも利用できます。

整形機能に加え、shellパッケージはコマンドラインの分割、変数やチルダの展開、globマッチングのヘルパーを提供します。interpパッケージでは、Windowsを含め、システムシェルを使わずにGo上でスクリプトを実行できます。サブシェルは実際のプロセスではなく、goroutineで実装されています。

主な機能

  • 01POSIX、Bash、Zsh、mkshのスクリプトを構文木に解析する。
  • 02shfmt CLIでシェルスクリプトを整形し、ファイルを直接書き換えることもできる。
  • 03Windowsを含め、システムシェルを使わずにGo上でスクリプトを実行する。
  • 04コマンドラインの分割、クォート、変数展開、globマッチングのヘルパーを提供する。
  • 05Dockerイメージと、さまざまなOS向けのパッケージを提供する。

ユースケース

  • CIやpre-commitを使って、チームのリポジトリ内のシェルスクリプトのスタイルを統一する。
  • シェルスクリプトをプログラムから解析・書き換えるGoツールを開発する。
  • Goアプリケーションにサンドボックス化されたシェルインタープリターを組み込む。
  • 既存のshfmtプラグインを使って、エディター上でシェルコードを整形する。

クイックスタート

  1. 1

    Go で shfmt CLI をインストールする

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

    シェルスクリプトをその場でフォーマットする

    shfmt -l -w script.sh

使う前に知っておきたいこと

  • ソースからインストールするには Go 1.26 以降が必要です。
  • サブシェルは goroutine で実行されるため、インタープリターでは実際の PID とファイルディスクリプターを利用できません。
  • `$((` と `((` の曖昧さには対応していません。

収録されている特集

トピック

よくある質問

sh とは?
POSIX、Bash、Zsh、mkshのシェルスクリプトを解析・整形・実行できるGoライブラリとshfmt CLI。 mvdan/shは、純粋なGoで実装されたシェルパーサー、フォーマッター、インタープリターです。POSIX Shell、Bash、Zsh、mkshの構文に対応し、スクリプトを構文木に変換して、プログラムから調査・書き換えできます。
sh は無料で使えますか?ライセンスは?
sh は BSD-3-Clause ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
sh は今もメンテナンスされていますか?
活発にメンテナンス中。sh の最終コミットは 2026年11月3日 です。
sh は何に使えますか?
CIやpre-commitを使って、チームのリポジトリ内のシェルスクリプトのスタイルを統一する。 シェルスクリプトをプログラムから解析・書き換えるGoツールを開発する。 Goアプリケーションにサンドボックス化されたシェルインタープリターを組み込む。 既存のshfmtプラグインを使って、エディター上でシェルコードを整形する。
sh のインストール方法は?
Go で shfmt CLI をインストールする: go install mvdan.cc/sh/v3/cmd/shfmt@latest シェルスクリプトをその場でフォーマットする: shfmt -l -w script.sh
sh はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/mvdan/sh

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト

コマンドの終了コードや実行時間などの情報とともに履歴をSQLiteに保存し、任意でエンドツーエンド暗号化してマシン間で同期できる、シェル履歴の置き換えツールです。

3.2万+67 今週1028RustMIT活発にメンテナンス更新 13 時間前