| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A shell parser, formatter, and interpreter. Supports POSIX Shell, Bash, and mksh. Requires Go 1.17 or later.
To parse shell scripts, inspect them, and print them out, see the syntax examples.
For high-level operations like performing shell expansions on strings, see the shell examples.
go install mvdan.cc/sh/v3/cmd/shfmt@latest
shfmt formats shell programs. See canonical.sh for a quick look at its default style. For example:
shfmt -l -w script.sh
For more information, see its manpage, which can be viewed directly as Markdown or rendered with scdoc.
Packages are available on Alpine, Arch, Debian, Docker, Fedora, FreeBSD, Homebrew, MacPorts, NixOS, Scoop, Snapcraft, Void and webi.
go install mvdan.cc/sh/v3/cmd/gosh@latest
Proof of concept shell that uses interp. Note that it's not meant to replace a POSIX shell at the moment, and its options are intentionally minimalistic.
We use Go's native fuzzing support, which requires Go 1.18 or later. For instance:
cd syntax go test -run=- -fuzz=ParsePrint
$ echo '${array[spaced string]}' | shfmt
1:16: not a valid arithmetic operator: string
$ echo '${array[dash-string]}' | shfmt
${array[dash - string]}$ echo '$((foo); (bar))' | shfmt
1:1: reached ) without matching $(( with ))A subset of the Go packages are available as an npm package called mvdan-sh. See the _js directory for more information.
All release tags are published via Docker, such as v3.5.1. The latest stable release is currently published as v3, and the latest development version as latest. The images only include shfmt; -alpine variants exist on Alpine Linux.
To build a Docker image, run:
docker build -t my:tag -f cmd/shfmt/Dockerfile .
To use a Docker image, run:
docker run --rm -u "$(id -u):$(id -g)" -v "$PWD:/mnt" -w /mnt my:tag <shfmt arguments>
The following editor integrations wrap shfmt:
Other noteworthy integrations include:
| Back | FazBrowse Home | New Git URL |