Skip to content

Releases: mvdan/sh

v3.0.0

16 Dec 13:43
Compare
Choose a tag to compare

This is the first stable release as a proper module, now under mvdan.cc/sh/v3/.... Go 1.12 or later is supported.

A large number of changes have been done since the last feature release a year ago. All users are encouraged to update. Below are the major highlights.

  • cmd/shfmt
    • Support for EditorConfig files
    • Drop the dependency on diff for the -d flag, now using pure Go
  • syntax
    • Overhaul escaped newlines, now represented as WordPart positions
    • Improve some operator type names, to consistently convey meaning
    • Completely remove StmtList
    • Redesign IfClause, making its "else" another IfClause node
    • Redesign DeclClause to remove its broken Opts field
    • Brace expression parsing is now done with a BraceExp word part
    • Improve comment alignment in Printer via a post-process step
    • Add support for the ~ bitwise negation operator
    • Record the use of deprecated tokens in the syntax tree
  • interp
    • Improve the module API as "handlers", to reduce confusion with Go modules
    • Split LookPath out of ExecHandler to allow custom behavior
    • Run now returns nil instead of ShellExitStatus(0)
    • OpenDevImpls is removed; see ExampleOpenHandler for an alternative
  • expand
    • Redesign Variable to reduce allocations
    • Add support for more escape sequences
    • Make Config a bit more powerful via func fields
    • Rework brace expansion via the new BraceExp word part
  • pattern
    • New package for shell pattern matching, extracted from syntax
    • Add support for multiple modes, including filenames and braces

Special thanks to Konstantin Kulikov for his contribution to this release.

v3.0.0-beta1

12 Nov 18:50
Compare
Choose a tag to compare
v3.0.0-beta1 Pre-release
Pre-release

This is one of the final pre-releases before v3.0.0. See the changelog for a summary of the included changes: https://github.com/mvdan/sh/blob/v3.0.0-beta1/CHANGELOG.md#unreleased

v2.6.4

10 Mar 17:34
Compare
Choose a tag to compare

Highlights:

  • syntax
    • Support array elements without values, like declare -A x=([index]=)
    • Parse for i; do ... uniquely, as it's short for for i in "$@"
    • Add missing error on unclosed nested backquotes
  • expand
    • Don't expand tildes twice, fixing echo ~ on Windows
  • interp
    • Fix the use of Params as an option to New
    • Support lowercase Windows volume names in $PATH

Binaries built on go version go1.12 linux/amd64.

v2.6.3

19 Jan 15:53
Compare
Choose a tag to compare

Highlights:

  • expand
    • Support globs with path prefixes and suffixes, like ./foo/*/
    • Don't error when skipping non-directories in glob walks

Binaries built on go version go1.11.4 linux/amd64.

v2.6.2

08 Dec 10:34
Compare
Choose a tag to compare

Highlights:

  • syntax
    • Avoid premature reads in Parser.Interactive when parsing Unicode bytes
    • Fix parsing of certain Bash test expression involving newlines
    • Redirect.End now takes the Hdoc field into account
    • ValidName now returns false for an empty string
  • expand
    • Environment variables on Windows are case insensitive again
  • interp
    • Don't crash on declare $unset=foo
    • Fix a regression where executed programs would receive a broken environment

Note that the published Docker image was changed to set shfmt as the entrypoint, so previous uses with arguments like docker run mvdan/shfmt:v2.6.1 shfmt --version should now be docker run mvdan/shfmt:v2.6.2 --version.

Binaries built on go version go1.11.2 linux/amd64.

v2.6.1

17 Nov 17:38
Compare
Choose a tag to compare

Highlights:

  • syntax
    • Fix Parser.Incomplete with some incomplete literals
    • Fix parsing of Bash regex tests in some edge cases
  • interp
    • Add support for $(<file) special command substitutions

Binaries built on go version go1.11.2 linux/amd64.

v2.6.0

10 Nov 14:28
Compare
Choose a tag to compare

This is the biggest v2 release to date. It's now possible to write an interactive shell, and it's easier and safer to perform shell expansions.

This will be the last major v2 version, to allow converting the project to a Go module in v3.

Highlights:

  • Go 1.10 or later required to build
  • syntax
    • Add Parser.Interactive to implement an interactive shell
    • Add Parser.Document to parse a single here-document body
    • Add Parser.Words to incrementally parse separate words
    • Add the Word.Lit helper method
    • Support custom indentation in <<- heredoc bodies
  • interp
    • Stabilize API and add some examples
    • Introduce a constructor, and redesign Runner.Reset
    • Move the context from a field to function parameters
    • Remove Runner.Stmt in favor of Run with ShellExitStatus
  • shell
    • Stabilize API and add some examples
    • Add Expand, as a more powerful os.Expand
    • Add Fields, similar to the old Runner.Fields
    • Source* functions now take a context
    • Source* functions no longer try to sandbox
  • expand
    • New package, split from interp
    • Allows performing shell expansions in a controlled way
    • Redesigned Environ and Variable moved from interp

Binaries built on go version go1.11.2 linux/amd64.

v2.5.1

03 Aug 20:51
Compare
Choose a tag to compare

Highlights:

  • syntax
    • Fix a regression where semicolons would disappear within switch cases

Binaries built on go version go1.10.3 linux/amd64.

v2.5.0

13 Jul 10:53
Compare
Choose a tag to compare

Highlights:

  • syntax
    • Add support for Bash's {varname}< redirects
    • Add SpaceRedirects to format redirects like > word
    • Parse $\" correctly within double quotes
    • A few fixes where minification would break programs
    • Printing of heredocs within <() no longer breaks them
    • Printing of single statements no longer adds empty lines
    • Error on invalid parameter names like ${1a}
  • interp
    • Runner.Dir is now always an absolute path
  • shell
    • Expand now supports expanding a lone ~
    • Expand and SourceNode now have default timeouts
  • cmd/shfmt
    • Add -sr to print spaces after redirect operators
    • Don't skip empty string values in -tojson
    • Include comment positions in -tojson

Binaries built on go version go1.10.3 linux/amd64.

v2.4.0

16 May 16:40
Compare
Choose a tag to compare

Highlights:

  • Publish as a JS package, mvdan-sh
  • syntax
    • Add DebugPrint to pretty-print a syntax tree
    • Fix comment parsing and printing in some edge cases
    • Indent <<- heredoc bodies if indenting with tabs
    • Add support for nested backquotes
    • Relax parser to allow quotes in arithmetic expressions
    • Don't rewrite declare foo= into declare foo
  • interp
    • Add support for shopt -s globstar
    • Replace Runner.Env with an interface
  • shell
    • Add Expand as a fully featured version of os.Expand
  • cmd/shfmt
    • Set appropriate exit status when -d is used

Binaries built on go version go1.10.2 linux/amd64.