shell

package module
v0.0.0-...-104b119 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 23, 2018 License: MIT Imports: 9 Imported by: 3

README

go-shell

Library to write "shelling out" Go code more shell-like, while remaining idiomatic to Go.

Features

  • Function-wrapper factories for shell commands
  • Panic on non-zero exits for set -e behavior
  • Result of Run() is a Stringer for STDOUT, has Error for STDERR
  • Heavily variadic function API Cmd("rm", "-r", "foo") == Cmd("rm -r", "foo")
  • Go-native piping Cmd(...).Pipe(...) or inline piping Cmd("... | ...")
  • Template compatible "last arg" piping Cmd(..., Cmd(..., Cmd(...)))
  • Optional trace output mode like set +x
  • Similar variadic functions for paths and path templates

Examples

import (
  "fmt"
  "github.com/progrium/go-shell"
)

var (
  sh = shell.Run
)

shell.Trace = true // like set +x
shell.Shell = []string{"/bin/bash", "-c"} // defaults to /bin/sh

func main() {
  defer shell.ErrExit()
  sh("echo Foobar > /foobar")
  sh("rm /fobar") // typo raises error
  sh("echo Done!") // never run, program exited
}
import (
  "fmt"
  "github.com/progrium/go-shell"
)

func main() {
  fmt.Println(shell.Cmd("echo", "foobar").Pipe("wc", "-c").Pipe("awk", "'{print $1}'").Run())
}
import "github.com/progrium/go-shell"

var (
  echo = shell.Cmd("echo").OutputFn()
  copy = shell.Cmd("cp").ErrFn()
  rm = shell.Cmd("rm").ErrFn()
)

func main() {
  err := copy("/foo", "/bar")
  // handle err
  err = rm("/bar")
  // handle err
  out, _ := echo("Done!")
}

License

MIT

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	Shell       = []string{"/bin/sh", "-c"}
	Panic       = true
	Trace       = false
	TracePrefix = "+"
)

Functions

func ErrExit

func ErrExit()

func Path

func Path(parts ...string) string

func PathTemplate

func PathTemplate(parts ...string) func(...interface{}) string

func Quote

func Quote(arg string) string

Types

type Command

type Command struct {
	// contains filtered or unexported fields
}

func Cmd

func Cmd(cmd ...interface{}) *Command

func (*Command) ErrFn

func (c *Command) ErrFn() func(...interface{}) error

func (*Command) OutputFn

func (c *Command) OutputFn() func(...interface{}) (string, error)

func (*Command) Pipe

func (c *Command) Pipe(cmd ...interface{}) *Command

func (*Command) ProcFn

func (c *Command) ProcFn() func(...interface{}) *Process

func (*Command) Run

func (c *Command) Run() *Process

func (*Command) SetWorkDir

func (c *Command) SetWorkDir(path string) *Command

func (*Command) Start

func (c *Command) Start() *Process

type Process

type Process struct {
	Stdout     *bytes.Buffer
	Stderr     *bytes.Buffer
	Stdin      io.WriteCloser
	ExitStatus int
	// contains filtered or unexported fields
}

func Run

func Run(cmd ...interface{}) *Process

func Start

func Start(cmd ...interface{}) *Process

func (*Process) Bytes

func (p *Process) Bytes() []byte

func (*Process) Error

func (p *Process) Error() error

func (*Process) Kill

func (p *Process) Kill() error

func (*Process) Read

func (p *Process) Read(b []byte) (int, error)

func (*Process) String

func (p *Process) String() string

func (*Process) Wait

func (p *Process) Wait() error

func (*Process) Write

func (p *Process) Write(b []byte) (int, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL