https://github.com/progrium/go-shell
https://github.com/progrium/go-shell
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/progrium/go-shell
- Owner: progrium
- License: mit
- Created: 2015-07-12T06:09:43.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2019-04-05T04:47:18.000Z (over 7 years ago)
- Last Synced: 2025-05-20T08:01:46.785Z (about 1 year ago)
- Language: Go
- Size: 12.7 KB
- Stars: 310
- Watchers: 9
- Forks: 23
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
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
```go
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
}
```
```go
import (
"fmt"
"github.com/progrium/go-shell"
)
func main() {
fmt.Println(shell.Cmd("echo", "foobar").Pipe("wc", "-c").Pipe("awk", "'{print $1}'").Run())
}
```
```go
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