• Stars
    star
    1,072
  • Rank 42,842 (Top 0.9 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created over 10 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

like python-sh, for easy call shell with golang.

go-sh

wercker status Go Walker

If you depend on the old api, see tag: v.0.1

install: go get github.com/codeskyblue/go-sh

Pipe Example:

package main

import "github.com/codeskyblue/go-sh"

func main() {
	sh.Command("echo", "hello\tworld").Command("cut", "-f2").Run()
}

Because I like os/exec, go-sh is very much modelled after it. However, go-sh provides a better experience.

These are some of its features:

  • keep the variable environment (e.g. export)
  • alias support (e.g. alias in shell)
  • remember current dir
  • pipe command
  • shell build-in commands echo & test
  • timeout support

Examples are important:

sh: echo hello
go: sh.Command("echo", "hello").Run()

sh: export BUILD_ID=123
go: s = sh.NewSession().SetEnv("BUILD_ID", "123")

sh: alias ll='ls -l'
go: s = sh.NewSession().Alias('ll', 'ls', '-l')

sh: (cd /; pwd)
go: sh.Command("pwd", sh.Dir("/")).Run()

sh: test -d data || mkdir data
go: if ! sh.Test("dir", "data") { sh.Command("mkdir", "data").Run() }

sh: cat first second | awk '{print $1}'
go: sh.Command("cat", "first", "second").Command("awk", "{print $1}").Run()

sh: count=$(echo "one two three" | wc -w)
go: count, err := sh.Echo("one two three").Command("wc", "-w").Output()

sh(in ubuntu): timeout 1s sleep 3
go: c := sh.Command("sleep", "3"); c.Start(); c.WaitTimeout(time.Second) # default SIGKILL
go: out, err := sh.Command("sleep", "3").SetTimeout(time.Second).Output() # set session timeout and get output)

sh: echo hello | cat
go: out, err := sh.Command("cat").SetInput("hello").Output()

sh: cat # read from stdin
go: out, err := sh.Command("cat").SetStdin(os.Stdin).Output()

sh: ls -l > /tmp/listing.txt # write stdout to file
go: err := sh.Command("ls", "-l").WriteStdout("/tmp/listing.txt")

If you need to keep env and dir, it is better to create a session

session := sh.NewSession()
session.SetEnv("BUILD_ID", "123")
session.SetDir("/")
# then call cmd
session.Command("echo", "hello").Run()
# set ShowCMD to true for easily debug
session.ShowCMD = true

By default, pipeline returns error only if the last command exit with a non-zero status. However, you can also enable pipefail option like bash. In that case, pipeline returns error if any of the commands fail and for multiple failed commands, it returns the error of rightmost failed command.

session := sh.NewSession()
session.PipeFail = true
session.Command("cat", "unknown-file").Command("echo").Run()

By default, pipelines's std-error is set to last command's std-error. However, you can also combine std-errors of all commands into pipeline's std-error using session.PipeStdErrors = true.

for more information, it better to see docs. Go Walker

contribute

If you love this project, starring it will encourage the coder. Pull requests are welcome.

support the author: alipay

thanks

this project is based on http://github.com/codegangsta/inject. thanks for the author.

the reason to use Go shell

Sometimes we need to write shell scripts, but shell scripts are not good at working cross platform, Go, on the other hand, is good at that. Is there a good way to use Go to write shell like scripts? Using go-sh we can do this now.

More Repositories

1

gohttpserver

The best HTTP Static File Server, write with golang+vue
JavaScript
2,441
star
2

gosuv

Deprecated!!! Process managerment writtern by golang, inspired by python-supervisor
JavaScript
643
star
3

fswatch

Watch file change, and trigger commands. (Cross platform)
Go
342
star
4

gohttp

HTTP file server written by golang + reactjs, not maintained, move to https://github.com/codeskyblue/gohttpserver
JavaScript
240
star
5

gobuild

not maintained, moved to https://github.com/gobuild/gobuild
Go
200
star
6

webcron

A new crontab that have a web page in order to replace the original crontab. Now it can try on test.
Go
161
star
7

tidevice3

wrapper for pymobiledevice3 to make it more easy to use.
Python
129
star
8

uiautodev

Mobile UI viewer in browser, view the UI in a tree view, and generate XPath automatically.
Python
55
star
9

go-reactjs-example

This is an exmple web use Golang And ReactJS
Go
54
star
10

docker-gogs

docker file for gogits
Shell
49
star
11

fa

FA(fast adb) helps you win at ADB(Android Debug Bridge).
Go
48
star
12

audiowire

Transfer PC Audio(Sound) to Browser (Beta)
JavaScript
37
star
13

heartbeat

heart beat for process status check. (心跳检测,UDP协议)
Go
23
star
14

kexec

Killable os/exec for golang library.
Go
21
star
15

kproc

go lib. offer a better way to kill all child process. [cross platform]
Go
21
star
16

proxylocal

Proxy local server to public network. (include server and client)
Go
15
star
17

netcat

example program, only for study golang.
Go
15
star
18

dockerignore

go library parse gitignore file, source code most from docker
Go
13
star
19

airfps

For mobile phone game to get FPS: frame per second.
C
10
star
20

dingrobot

DingTake Robot API
Go
9
star
21

node-python-rpc

Node modules which helps call python code in node
Python
9
star
22

apkinfo

get apkinfo use pure go code. (packageName, mainActivty etc...)
Go
8
star
23

go-image-encode-benchmark

Golang Image encode bench mark
Go
7
star
24

sshg

ssh client with quick search and remote config
Python
6
star
25

GoHello

Sample Android Project With Golang1.4 (AndroidStudioIDE)
Java
6
star
26

beelog

A simple log for Debug Trace Warn Error Critacal, extract code from astaxie/beego.
Go
6
star
27

adb

adb for docker armhf
Dockerfile
5
star
28

klog

Simple log extention for golang official log, ^_^ I like simple.
Go
5
star
29

gossh

command: wraper of ssh, save passwords for users.
Go
5
star
30

gochm

Golang chm version 1.3
5
star
31

httpfs

Go Library for open http file like local file
Go
5
star
32

pngdiff

Golang library png format file diff and patch.
Go
5
star
33

sshgo

通过使用sshpass进行机器间的调整,支持机器名的简写
Python
4
star
34

pm25

get city pm2.5. (I hope one day we will not care about the pm2.5)
JavaScript
4
star
35

adbx

ADB的加强版本,Make ADB more stronger
Go
4
star
36

imutils2

another imutils for opencv simple use
Python
3
star
37

meet-cars

Capture vehicle license plate with ML on the way to work.
Python
3
star
38

docker-goandroid

Dockerfile for golang1.4 android development environment
Go
3
star
39

realip

Get real IP behide nginx (Do not ignore private address)
Go
3
star
40

goshare

share file in current machine.
Go
3
star
41

filedist

智能文件分发工具(smart file distribution)
Go
3
star
42

gen_movie_article

通过提供的电影名列表,结合豆瓣提供的API,生成Markdown文章
Python
3
star
43

bootstrap-tornado

Write a tornado app from a template
Python
3
star
44

monitor

linux系统的监控
Go
3
star
45

github-mirror

For fast get github resource without block.
Go
2
star
46

AutoStock

个人研究和学习股票算法的仓库
Jupyter Notebook
2
star
47

dotfiles

my own dotfiles for linux and mac
Shell
2
star
48

cloudmusic_test_demo

演示教学用
Python
2
star
49

go-websocket

fork of code.google.com/p/go.net/websocket
Go
2
star
50

imageautodemo

Demo of automation based on Image template match
Python
2
star
51

exec

An implement of os/exec, but add timeout option
Go
2
star
52

shweb

Writing web using shell.
Go
2
star
53

webtail

Tail log into web (experimental)
JavaScript
2
star
54

grget

simple online go build
Go
2
star
55

jshunter

javascript static check, based on jslint, output html report
JavaScript
2
star
56

pyignore

Python
2
star
57

muuid

Machine UUID, port of github.com/mhzed/machine-uuid
Go
2
star
58

unsafessh

exec remote command easily.
Go
1
star
59

baidu-prompt-crawler

检查百度关键词
Python
1
star
60

keeprun

Keep console program running.
Go
1
star
61

fibonacci

python simple fibonacci for study of publish python lib
Python
1
star
62

raspi-car

little car controlled by raspberry
Python
1
star
63

shxsun.github.io

Vim Script
1
star
64

pydefer

golang defer implements in python
Python
1
star
65

simple_tornado

为了方便tornado使用的一个库
Python
1
star
66

macaron-jade

Jade template engine for macaron
Go
1
star
67

scripts

scripts of for devop
Shell
1
star
68

gogen

study project. like rails, this is named gails. for quickly golang web develop.
Go
1
star
69

android-snapshot-with-golang

screencap implements with golang
Go
1
star
70

fire

a new project that will replace jetfire
Go
1
star
71

apkdig

Inspect android package information
Go
1
star
72

travelexec

(golang binary bool) travel file tree and call exec (like find + xargs, but offers more functions)
Go
1
star
73

findme

This program help me to find my raspberrypi IP address
Python
1
star
74

py3toolkit

toolkit for my common use
Python
1
star
75

codeskyblue

1
star