Documentation
¶
Overview ¶
Package go-sh is intended to make shell call with golang more easily. Some usage is more similar to os/exec, eg: Run(), Output(), Command(name, args...)
But with these similar function, pipe is added in and this package also got shell-session support.
Why I love golang so much, because the usage of golang is simple, but the power is unlimited. I want to make this pakcage got the sample style like golang.
// just like os/exec sh.Command("echo", "hello").Run() // support pipe sh.Command("echo", "hello").Command("wc", "-c").Run() // create a session to store dir and env sh.NewSession().SetDir("/").Command("pwd") // shell buildin command - "test" sh.Test("dir", "mydir") // like shell call: (cd /; pwd) sh.Command("pwd", sh.Dir("/")) same with sh.Command(sh.Dir("/"), "pwd") // output to json and xml easily v := map[string] int {} err = sh.Command("echo", `{"number": 1}`).UnmarshalJSON(&v)
Example (Command_Pipe) ¶
out, err := sh.Command("echo", "-n", "hi").Command("wc", "-c").Output() fmt.Println(string(out), err)
Output:
Example (Command_SetDir) ¶
out, err := sh.Command("pwd", sh.Dir("/")).Output() fmt.Println(string(out), err)
Output:
Example (Session_Command) ¶
#!/bin/bash - # export PATH=/usr/bin:/bin alias ll='ls -l' cd /usr if test -d "local" then
ll local | awk '{print $1, $NF}' | grep bin
fi
s := NewSession() //s.ShowCMD = true s.Env["PATH"] = "/usr/bin:/bin" s.SetDir("/bin") s.Alias("ll", "ls", "-l") if s.Test("d", "local") { //s.Command("ll", []string{"local"}).Command("awk", []string{"{print $1, $NF}"}).Command("grep", []string{"bin"}).Run() s.Command("ll", "local").Command("awk", "{print $1, $NF}").Command("grep", "bin").Run() }
Output:
Index ¶
- Variables
- func Go(f func() error) chan error
- func Test(exp string, arg string) bool
- type Dir
- type Session
- func (s *Session) Alias(alias, cmd string, args ...string)
- func (s *Session) AppendStdout(f string) error
- func (s *Session) Call(name string, a ...interface{}) error
- func (s *Session) CombinedOutput() (out []byte, err error)
- func (s *Session) Command(name string, a ...interface{}) *Session
- func (s *Session) Getwd() string
- func (s *Session) Kill(sig os.Signal)
- func (s *Session) LeafCommand(name string, a ...interface{}) *Session
- func (s *Session) Output() (out []byte, err error)
- func (s *Session) Run() (err error)
- func (s *Session) SetDir(dir string) *Session
- func (s *Session) SetEnv(key, value string) *Session
- func (s *Session) SetInput(in string) *Session
- func (s *Session) SetStdin(r io.Reader) *Session
- func (s *Session) SetTimeout(d time.Duration) *Session
- func (s *Session) Start() (err error)
- func (s *Session) Test(expression string, argument string) bool
- func (s *Session) UnmarshalJSON(data interface{}) (err error)
- func (s *Session) UnmarshalXML(data interface{}) (err error)
- func (s *Session) Wait() error
- func (s *Session) WaitTimeout(timeout time.Duration) (err error)
- func (s *Session) WriteStdout(f string) error
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ErrExecTimeout = errors.New("execute timeout")
Functions ¶
Types ¶
type Session ¶
type Session struct { Env map[string]string Stdin io.Reader Stdout io.Writer Stderr io.Writer ShowCMD bool // enable for debug // additional pipe options PipeFail bool // returns error of rightmost no-zero command PipeStdErrors bool // combine std errors of all pipe commands // contains filtered or unexported fields }
func Command ¶
Example ¶
out, err := sh.Command("echo", "hello").Output() fmt.Println(string(out), err)
Output:
func InteractiveSession ¶
func InteractiveSession() *Session
func NewSession ¶
func NewSession() *Session
func (*Session) Alias ¶
Example ¶
s := NewSession() s.Alias("alias_echo_hello", "echo", "hello") out, err := s.Command("alias_echo_hello", "world").Output() if err != nil { log.Fatal(err) } fmt.Println(string(out))
Output: hello world
func (*Session) AppendStdout ¶
func (*Session) CombinedOutput ¶
func (*Session) Command ¶
Example ¶
s := NewSession() out, err := s.Command("echo", "hello").Output() if err != nil { log.Fatal(err) } fmt.Println(string(out))
Output: hello
Example (Pipe) ¶
s := NewSession() out, err := s.Command("echo", "hello", "world").Command("awk", "{print $2}").Output() if err != nil { log.Fatal(err) } fmt.Println(string(out))
Output: world
func (*Session) LeafCommand ¶ added in v0.2.0
func (*Session) UnmarshalJSON ¶
unmarshal shell output to decode json
func (*Session) UnmarshalXML ¶
unmarshal command output into xml
func (*Session) WriteStdout ¶
Click to show internal directories.
Click to hide internal directories.