Categorygithub.com/buildkite/shellwords
modulepackage
0.0.0-20180315110454-59467a9b8e10
Repository: https://github.com/buildkite/shellwords.git
Documentation: pkg.go.dev

# README

Shellwords

A golang library for splitting command-line strings into words like a Posix or Windows shell would.

Installation

go get -u github.com/buildkite/shellwords

Usage

package main

import (
  "github.com/buildkite/shellwords"
  "fmt"
)

func main() {
  words := shellwords.Split(`/usr/bin/bash -e -c "llamas are the \"best\" && echo 'alpacas'"`)
  for _, word := range words {
    fmt.Println(word)
  }
}

// Outputs:
// /usr/bin/bash
// -e
// -c
// llamas are the "best" && echo 'alpacas'

Alternatives

Previously we were using https://github.com/mattn/go-shellwords, but it lacked support for Windows quoting and escaping conventions, specifically backslashed paths. It also supports things like env expansion and command execution, which made me very nervous, so I decided to write a simpler lexer that just addressed the splitting problem.

Other alternatives are https://github.com/flynn-archive/go-shlex and https://github.com/kballard/go-shellquote, of which the latter is probably closest in spirit to this library.

License

Licensed under MIT license, in LICENSE.

# Functions

Quote chooses between QuotePosix and QuoteBatch based on your operating system.
QuoteBatch returns the string such that a CMD.EXE shell would parse it as a single word.
QuotePosix returns the string such that a posix shell would parse it as a single word.
Split chooses between SplitPosix and SplitBatch based on your operating system.
SplitBatch splits a command string into words like Windows CMD.EXE would See https://ss64.com/nt/syntax-esc.html.
SplitPosix splits a command string into words like a posix shell would.