From 41fe4a4659d50d70a835224405490588019d24ff Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Thu, 25 Jan 2024 00:39:14 -0600 Subject: [PATCH] new home Signed-off-by: Jeff Carr --- Makefile | 31 +++----------------- README.md | 2 +- args.go | 4 +-- chomp.go | 74 +++++++++++++++++++++++------------------------ example1/Makefile | 8 +++++ example1/go.mod | 3 ++ example1/main.go | 2 +- example2/main.go | 2 +- go.mod | 10 +++---- go.sum | 20 ++++++------- int.go | 6 ++-- linux.go | 22 ++++++-------- md5sum.go | 12 ++++---- run.go | 52 ++++++++++++++++----------------- shell.go | 46 ++++++++++++++--------------- ssh.go | 24 +++++++-------- structs.go | 51 +++++++++++++++++--------------- wget.go | 15 +++++----- windows.go | 4 +-- windowsWrapper.go | 2 +- 20 files changed, 187 insertions(+), 203 deletions(-) create mode 100644 example1/go.mod diff --git a/Makefile b/Makefile index 539d964..b4b840c 100644 --- a/Makefile +++ b/Makefile @@ -1,32 +1,9 @@ all: - # 'gaper' is a simple and smart golang tool that just rebuilds every time you change a file - # go get -u github.com/maxcnunes/gaper - # gaper -# simple sortcut to push all git changes -push: - git pull - git add --all - -git commit -a -s - git push +goimports: + goimports -w *.go redomod: rm -f go.* - unset GO111MODULES && go mod init - unset GO111MODULES && go mod tidy - -# should update every go dependancy (?) -update: - git pull - go get -v -t -u ./... - -# sync repo to the github backup -# git remote add github2 git@github.com:wit-go/shell.git -# git branch -M master -github: - git push origin master - git push origin devel - git push origin --tags - git push github master - git push github devel - git push github --tags + GO111MODULE= go mod init + GO111MODULE= go mod tidy diff --git a/README.md b/README.md index 3711e26..1e41881 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ non-blocking unbuffered way # install ``` -go get -v -t -u go.wit.com/shell +go get -v -t -u go.wit.com/lib/gui/shell ``` # License diff --git a/args.go b/args.go index 2d50d6b..3c39ceb 100644 --- a/args.go +++ b/args.go @@ -12,10 +12,10 @@ var RUN *log.LogFlag var SSH *log.LogFlag func init() { - full := "go.wit.com/shell" + full := "go.wit.com/lib/gui/shell" short := "shell" - NOW = log.NewFlag("NOW", true, full, short, "temp debugging stuff") + NOW = log.NewFlag("NOW", true, full, short, "temp debugging stuff") INFO = log.NewFlag("INFO", false, full, short, "General Info") RUN = log.NewFlag("RUN", false, full, short, "Run() info") SSH = log.NewFlag("SSH", false, full, short, "ssh() info") diff --git a/chomp.go b/chomp.go index 9bf331a..db37ecb 100644 --- a/chomp.go +++ b/chomp.go @@ -1,16 +1,16 @@ package shell -/* +/* perl 'chomp' send it anything, always get back a string */ import ( + "bytes" "fmt" "reflect" "strings" - "bytes" "go.wit.com/log" ) @@ -24,14 +24,12 @@ func chompBytesBuffer(buf *bytes.Buffer) string { return Chomp(string(bytesSplice)) } -// // TODO: obviously this is stupidly wrong // TODO: fix this to trim fucking everything // really world? 8 fucking years of this language // and I'm fucking writing this? jesus. how the // hell is everyone else doing this? Why isn't // this already in the strings package? -// func perlChomp(s string) string { // lots of stuff in go moves around the whole block of whatever it is so lots of things are padded with NULL values s = strings.Trim(s, "\x00") // removes NULL (needed!) @@ -42,8 +40,8 @@ func perlChomp(s string) string { s = strings.TrimSuffix(s, "\r") s = strings.TrimSuffix(s, "\n") - s = strings.TrimSpace(s) // this is like 'chomp' in perl - s = strings.TrimSuffix(s, "\n") // this is like 'chomp' in perl + s = strings.TrimSpace(s) // this is like 'chomp' in perl + s = strings.TrimSuffix(s, "\n") // this is like 'chomp' in perl return s } @@ -51,40 +49,40 @@ func perlChomp(s string) string { func Chomp(a interface{}) string { // switch reflect.TypeOf(a) { switch t := a.(type) { - case string: - var s string - s = a.(string) - return perlChomp(s) - case []uint8: - // log.Printf("shell.Chomp() FOUND []uint8") - var tmp []uint8 - tmp = a.([]uint8) + case string: + var s string + s = a.(string) + return perlChomp(s) + case []uint8: + // log.Printf("shell.Chomp() FOUND []uint8") + var tmp []uint8 + tmp = a.([]uint8) - s := string(tmp) - return perlChomp(s) - case uint64: - // log.Printf("shell.Chomp() FOUND []uint64") - s := fmt.Sprintf("%d", a.(uint64)) - return perlChomp(s) - case int64: - // log.Printf("shell.Chomp() FOUND []int64") - s := fmt.Sprintf("%d", a.(int64)) - return perlChomp(s) - case *bytes.Buffer: - // log.Printf("shell.Chomp() FOUND *bytes.Buffer") - var tmp *bytes.Buffer - tmp = a.(*bytes.Buffer) - if (tmp == nil) { - return "" - } + s := string(tmp) + return perlChomp(s) + case uint64: + // log.Printf("shell.Chomp() FOUND []uint64") + s := fmt.Sprintf("%d", a.(uint64)) + return perlChomp(s) + case int64: + // log.Printf("shell.Chomp() FOUND []int64") + s := fmt.Sprintf("%d", a.(int64)) + return perlChomp(s) + case *bytes.Buffer: + // log.Printf("shell.Chomp() FOUND *bytes.Buffer") + var tmp *bytes.Buffer + tmp = a.(*bytes.Buffer) + if tmp == nil { + return "" + } - var bytesSplice []byte - bytesSplice = tmp.Bytes() - return Chomp(string(bytesSplice)) - default: - tmp := fmt.Sprint("shell.Chomp() NO HANDLER FOR TYPE: %T", a) - handleError(fmt.Errorf(tmp), -1) - log.Warn("shell.Chomp() NEED TO MAKE CONVERTER FOR type =", reflect.TypeOf(t)) + var bytesSplice []byte + bytesSplice = tmp.Bytes() + return Chomp(string(bytesSplice)) + default: + tmp := fmt.Sprint("shell.Chomp() NO HANDLER FOR TYPE: %T", a) + handleError(fmt.Errorf(tmp), -1) + log.Warn("shell.Chomp() NEED TO MAKE CONVERTER FOR type =", reflect.TypeOf(t)) } tmp := "shell.Chomp() THIS SHOULD NEVER HAPPEN" handleError(fmt.Errorf(tmp), -1) diff --git a/example1/Makefile b/example1/Makefile index 7b4c2b6..443064f 100644 --- a/example1/Makefile +++ b/example1/Makefile @@ -1,3 +1,11 @@ all: # go build GO111MODULE="off" go run main.go + +goimports: + goimports -w *.go + +redomod: + rm -f go.* + GO111MODULE= go mod init + GO111MODULE= go mod tidy diff --git a/example1/go.mod b/example1/go.mod new file mode 100644 index 0000000..0cd8c1f --- /dev/null +++ b/example1/go.mod @@ -0,0 +1,3 @@ +module go.wit.com/lib/gui/shell/example1 + +go 1.21.4 diff --git a/example1/main.go b/example1/main.go index 6aa9399..f9998a5 100644 --- a/example1/main.go +++ b/example1/main.go @@ -9,7 +9,7 @@ import "os" // import "github.com/davecgh/go-spew/spew" -import "go.wit.com/shell" +import "go.wit.com/lib/gui/shell" func main() { shell.Run("ls /tmp") diff --git a/example2/main.go b/example2/main.go index 56ec1e6..2593a2b 100644 --- a/example2/main.go +++ b/example2/main.go @@ -2,7 +2,7 @@ package main import "log" // import "fmt" -import "go.wit.com/shell" +import "go.wit.com/lib/gui/shell" func main() { err := shell.Run("cat /etc/issue") diff --git a/go.mod b/go.mod index 7a1b097..e6600ef 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module go.wit.com/shell +module go.wit.com/lib/gui/shell go 1.21.4 @@ -6,14 +6,14 @@ require ( github.com/svent/go-nbreader v0.0.0-20150201200112-7cef48da76dc github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef github.com/wercker/journalhook v0.0.0-20230927020745-64542ffa4117 - go.wit.com/log v0.4.1 - golang.org/x/crypto v0.17.0 + go.wit.com/log v0.5.6 + golang.org/x/crypto v0.18.0 ) require ( github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - go.wit.com/spew v0.0.0-20240101141411-c7b8e91573c9 // indirect - golang.org/x/sys v0.15.0 // indirect + go.wit.com/dev/davecgh/spew v1.1.4 // indirect + golang.org/x/sys v0.16.0 // indirect ) diff --git a/go.sum b/go.sum index c9496cd..290251d 100644 --- a/go.sum +++ b/go.sum @@ -18,17 +18,17 @@ github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef h1:7D6Nm4D6f0ci9yttWaKjM1T github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef/go.mod h1:WLFStEdnJXpjK8kd4qKLwQKX/1vrDzp5BcDyiZJBHJM= github.com/wercker/journalhook v0.0.0-20230927020745-64542ffa4117 h1:67A5tweHp3C7osHjrYsy6pQZ00bYkTTttZ7kiOwwHeA= github.com/wercker/journalhook v0.0.0-20230927020745-64542ffa4117/go.mod h1:XCsSkdKK4gwBMNrOCZWww0pX6AOt+2gYc5Z6jBRrNVg= -go.wit.com/log v0.4.1 h1:x2PXlm1exgFrweGTM7thyj6KJabtnGlXssYkxv56hpc= -go.wit.com/log v0.4.1/go.mod h1:EZLvivLZpMoXl5AUBArH0zsIgr+c+WyNXm14BCF+sdw= -go.wit.com/spew v0.0.0-20240101141411-c7b8e91573c9 h1:UEX2EzLQPzLTfy/kUFQD7OXtvKn8wk/+jpDOkbl4ff4= -go.wit.com/spew v0.0.0-20240101141411-c7b8e91573c9/go.mod h1:qBpgJXThMMT15vym7/E4Ur9y8oOo2nP7t2RP52QHUNw= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +go.wit.com/dev/davecgh/spew v1.1.4 h1:C9hj/rjlUpdK+E6aroyLjCbS5MFcyNUOuP1ICLWdNek= +go.wit.com/dev/davecgh/spew v1.1.4/go.mod h1:sihvWmnQ/09FWplnEmozt90CCVqBtGuPXM811tgfhFA= +go.wit.com/log v0.5.6 h1:rDC3ju95zfEads4f1Zm+QMkqjZ39CsYAT/UmQQs7VP4= +go.wit.com/log v0.5.6/go.mod h1:BaJBfHFqcJSJLXGQ9RHi3XVhPgsStxSMZRlaRxW4kAo= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/int.go b/int.go index dcf6b1e..bf78209 100644 --- a/int.go +++ b/int.go @@ -1,6 +1,6 @@ package shell -/* +/* send it anything, always get back an int */ @@ -13,7 +13,7 @@ import "strconv" func Int(s string) int { s = Chomp(s) i, err := strconv.Atoi(s) - if (err != nil) { + if err != nil { handleError(err, -1) return 0 } @@ -23,7 +23,7 @@ func Int(s string) int { func Int64(s string) int64 { s = Chomp(s) i, err := strconv.Atoi(s) - if (err != nil) { + if err != nil { handleError(err, -1) return 0 } diff --git a/linux.go b/linux.go index 5a602a1..ee24420 100644 --- a/linux.go +++ b/linux.go @@ -1,24 +1,20 @@ +//go:build linux && go1.7 // +build linux,go1.7 // put stuff in here that you only want compiled under linux package shell -import "log" -import "os" -import "os/signal" -import "syscall" +import ( + "log" + "os" + "os/signal" + "syscall" -// import "runtime" -// import "time" -// import "reflect" + "github.com/wercker/journalhook" +) -// import "go.wit.com/shell" -// import "github.com/davecgh/go-spew/spew" - -import "github.com/wercker/journalhook" - -var sigChan chan os.Signal +var sigChan chan os.Signal func handleSignal(err interface{}, ret int) { log.Println("handleSignal() only should be compiled on linux") diff --git a/md5sum.go b/md5sum.go index 2d309d0..05c4dba 100644 --- a/md5sum.go +++ b/md5sum.go @@ -1,10 +1,12 @@ package shell -import "crypto/md5" -import "encoding/hex" -import "log" -import "io" -import "os" +import ( + "crypto/md5" + "encoding/hex" + "io" + "log" + "os" +) func hash_file_md5(filePath string) (string, error) { var returnMD5String string diff --git a/run.go b/run.go index 0788105..ed35653 100644 --- a/run.go +++ b/run.go @@ -1,14 +1,14 @@ package shell import ( + "bufio" + "bytes" + "fmt" + "io" + "os" + "os/exec" "strings" "time" - "os/exec" - "bytes" - "io" - "fmt" - "os" - "bufio" "github.com/svent/go-nbreader" @@ -31,7 +31,7 @@ func Run(cmdline string) string { func (cmd *Shell) Run(cmdline string) string { cmd.InitProcess(cmdline) - if (cmd.Error != nil) { + if cmd.Error != nil { return "" } cmd.Exec(cmdline) @@ -39,17 +39,17 @@ func (cmd *Shell) Run(cmdline string) string { } func (cmd *Shell) InitProcess(cmdline string) { - log.Log(RUN, "shell.InitProcess() START " + cmdline) + log.Log(RUN, "shell.InitProcess() START "+cmdline) cmd.Cmdline = Chomp(cmdline) // this is like 'chomp' in perl cmdArgs := strings.Fields(cmd.Cmdline) - if (len(cmdArgs) == 0) { + if len(cmdArgs) == 0 { cmd.Error = fmt.Errorf("cmdline == ''") cmd.Done = true return } - if (cmdArgs[0] == "cd") { - if (len(cmdArgs) > 1) { + if cmdArgs[0] == "cd" { + if len(cmdArgs) > 1 { log.Log(RUN, "os.Chdir()", cmd) os.Chdir(cmdArgs[1]) } @@ -65,17 +65,17 @@ func (cmd *Shell) FileCreate(out string) { var newfile File var iof io.ReadCloser - if (out == "STDOUT") { - iof, _ = cmd.Process.StdoutPipe() + if out == "STDOUT" { + iof, _ = cmd.Process.StdoutPipe() } else { - iof, _ = cmd.Process.StderrPipe() + iof, _ = cmd.Process.StderrPipe() } newfile.Fio = iof newfile.Fbufio = bufio.NewReader(iof) newfile.Fnbreader = nbreader.NewNBReader(newfile.Fbufio, 1024) - if (out == "STDOUT") { + if out == "STDOUT" { cmd.STDOUT = &newfile } else { cmd.STDERR = &newfile @@ -85,10 +85,10 @@ func (cmd *Shell) FileCreate(out string) { // NOTE: this might cause problems: // always remove the newlines at the end ? func (cmd *Shell) Exec(cmdline string) { - log.Log(RUN, "shell.Run() START " + cmdline) + log.Log(RUN, "shell.Run() START "+cmdline) cmd.InitProcess(cmdline) - if (cmd.Error != nil) { + if cmd.Error != nil { return } @@ -111,7 +111,7 @@ func (cmd *Shell) Exec(cmdline string) { // time.Sleep(2 * time.Second) // putting this here doesn't help STDOUT flush() - if (err != nil) { + if err != nil { cmd.Fail = true cmd.Error = err log.Log(RUN, "process.Wait() END err =", err.Error()) @@ -125,10 +125,10 @@ func (cmd *Shell) Exec(cmdline string) { func (cmd *Shell) Capture(f *File) { log.Log(RUN, "nbrREADER() START") - if (cmd.Buffer == nil) { + if cmd.Buffer == nil { cmd.Buffer = new(bytes.Buffer) } - if (cmd.Buffer == nil) { + if cmd.Buffer == nil { f.Dead = false cmd.Error = fmt.Errorf("could not make buffer") log.Error(cmd.Error, "f.Buffer == nil") @@ -139,15 +139,15 @@ func (cmd *Shell) Capture(f *File) { f.Dead = false // loop that keeps trying to read from f - for (f.Dead == false) { - time.Sleep(time.Duration(msecDelay) * time.Millisecond) // only check the buffer 500 times a second + for f.Dead == false { + time.Sleep(time.Duration(msecDelay) * time.Millisecond) // only check the buffer 500 times a second // set to false so it keeps retrying reads f.Empty = false // tight loop that reads 1024 bytes at a time until buffer is empty // 1024 is set in f.BufferSize - for (f.Empty == false) { + for f.Empty == false { f.Empty = cmd.ReadToBuffer(f) } } @@ -158,7 +158,7 @@ func (cmd *Shell) ReadToBuffer(f *File) bool { log.Log(RUN, "ReadToBuffer() START") nbr := f.Fnbreader oneByte := make([]byte, 1024) - if (nbr == nil) { + if nbr == nil { // log.Debugln("ReadToBuffer() ERROR nbr is nil") f.Dead = true return true @@ -166,13 +166,13 @@ func (cmd *Shell) ReadToBuffer(f *File) bool { count, err := nbr.Read(oneByte) f.TotalCount += count - if (err != nil) { + if err != nil { // log.Debugln("ReadToBuffer() file has closed with", err) // log.Debugln("ReadToBuffer() count = ", count, "err = ", err) f.Dead = true return true } - if (count == 0) { + if count == 0 { // log.Debugln("ReadToBuffer() START count == 0 return true") return true } diff --git a/shell.go b/shell.go index dcba03b..0ca2de3 100644 --- a/shell.go +++ b/shell.go @@ -1,18 +1,17 @@ package shell import ( - "strings" - "time" - "os" - "os/exec" "bufio" "io/ioutil" + "os" + "os/exec" + "strings" + "time" - "go.wit.com/log" "github.com/svent/go-nbreader" + "go.wit.com/log" ) - // TODO: look at https://github.com/go-cmd/cmd/issues/20 // use go-cmd instead here? @@ -21,8 +20,9 @@ var callback func(interface{}, int) var shellStdout *os.File var shellStderr *os.File -var spewOn bool = false -var quiet bool = false +var spewOn bool = false +var quiet bool = false + // var msecDelay int = 20 // number of milliseconds to delay between reads with no data // var bytesBuffer bytes.Buffer @@ -30,13 +30,13 @@ var quiet bool = false func handleError(c interface{}, ret int) { log.Log(INFO, "shell.Run() Returned", ret) - if (callback != nil) { + if callback != nil { callback(c, ret) } } func init() { - callback = nil + callback = nil } func InitCallback(f func(interface{}, int)) { @@ -112,7 +112,7 @@ func nonBlockingReader(buffReader *bufio.Reader, writeFileHandle *os.File, stdou // newreader := bufio.NewReader(readFileHandle) // create a nonblocking GO reader - nbr := nbreader.NewNBReader(buffReader, 1024) + nbr := nbreader.NewNBReader(buffReader, 1024) for { // defer buffReader.Close() @@ -122,22 +122,22 @@ func nonBlockingReader(buffReader *bufio.Reader, writeFileHandle *os.File, stdou for { oneByte := make([]byte, 1024) count, err := nbr.Read(oneByte) - if (err != nil) { + if err != nil { log.Log(INFO, "count, err =", count, err) handleError(err, -1) return } totalCount += count - if (count == 0) { - time.Sleep(time.Duration(msecDelay) * time.Millisecond) // without this delay this will peg the CPU - if (totalCount != 0) { + if count == 0 { + time.Sleep(time.Duration(msecDelay) * time.Millisecond) // without this delay this will peg the CPU + if totalCount != 0 { log.Log(INFO, "STDERR: totalCount = ", totalCount) totalCount = 0 } } else { log.Log(INFO, "STDERR: count = ", count) writeFileHandle.Write(oneByte[0:count]) - if (quiet == false) { + if quiet == false { stdout.Write(oneByte[0:count]) stdout.Flush() } @@ -150,15 +150,15 @@ func nonBlockingReader(buffReader *bufio.Reader, writeFileHandle *os.File, stdou // TODO: pass STDOUT, STDERR, STDIN correctly // TODO: figure out how to nohup the process and exit func Exec(cmdline string) { - log.Log(INFO, "shell.Run() START " + cmdline) + log.Log(INFO, "shell.Run() START "+cmdline) - cmd := Chomp(cmdline) // this is like 'chomp' in perl - cmdArgs := strings.Fields(cmd) + cmd := Chomp(cmdline) // this is like 'chomp' in perl + cmdArgs := strings.Fields(cmd) - process := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...) - process.Stderr = os.Stderr - process.Stdin = os.Stdin - process.Stdout = os.Stdout + process := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...) + process.Stderr = os.Stderr + process.Stdin = os.Stdin + process.Stdout = os.Stdout process.Start() err := process.Wait() log.Log(INFO, "shell.Exec() err =", err) diff --git a/ssh.go b/ssh.go index 7882ada..67b5c22 100644 --- a/ssh.go +++ b/ssh.go @@ -5,23 +5,23 @@ import ( "io/ioutil" "time" - "golang.org/x/crypto/ssh" "github.com/tmc/scp" "go.wit.com/log" + "golang.org/x/crypto/ssh" ) var sshHostname string -var sshPort int -var sshUsername string -var sshPassword string -var sshKeyfile string +var sshPort int +var sshUsername string +var sshPassword string +var sshKeyfile string func SSHclientSet(hostname string, port int, username string, pass string, keyfile string) { - sshHostname = hostname - sshPort = port - sshUsername = username - sshPassword = pass - sshKeyfile = keyfile + sshHostname = hostname + sshPort = port + sshUsername = username + sshPassword = pass + sshKeyfile = keyfile } func SSHclientSCP(localfile string, remotefile string) { @@ -49,7 +49,7 @@ func mySsh(hostname string, port int, username string, pass string, keyfile stri // log.Log(SSH, "hostkey =", hostKey) publicKey, err := PublicKeyFile(keyfile) - if (err != nil) { + if err != nil { log.Log(SSH, "PublicKeyFile() error =", err) } @@ -75,7 +75,7 @@ func mySsh(hostname string, port int, username string, pass string, keyfile stri ssh.KeyAlgoED25519, }, // optional tcp connect timeout - Timeout: 5 * time.Second, + Timeout: 5 * time.Second, } sport := fmt.Sprintf("%d", port) diff --git a/structs.go b/structs.go index 1e0b692..c250fcf 100644 --- a/structs.go +++ b/structs.go @@ -1,45 +1,48 @@ package shell -import "io" -import "os/exec" -import "bufio" -import "bytes" -import "github.com/svent/go-nbreader" +import ( + "bufio" + "bytes" + "io" + "os/exec" -var FileMap map[string]*File + "github.com/svent/go-nbreader" +) + +var FileMap map[string]*File var readBufferSize int type File struct { - Name string + Name string // BufferSize int // Buffer *bytes.Buffer // Fbytes []byte - TotalCount int - Empty bool - Dead bool + TotalCount int + Empty bool + Dead bool - Fio io.ReadCloser // := process.StdoutPipe() - Fbufio *bufio.Reader // := bufio.NewReader(pOUT) - Fnbreader *nbreader.NBReader // := nbreader.NewNBReader(readOUT, 1024) + Fio io.ReadCloser // := process.StdoutPipe() + Fbufio *bufio.Reader // := bufio.NewReader(pOUT) + Fnbreader *nbreader.NBReader // := nbreader.NewNBReader(readOUT, 1024) } type Shell struct { - Cmdline string - Process *exec.Cmd - Done bool - Quiet bool - Fail bool - Error error - Buffer *bytes.Buffer + Cmdline string + Process *exec.Cmd + Done bool + Quiet bool + Fail bool + Error error + Buffer *bytes.Buffer // which names are really better here? // for now I init them both to test out // how the code looks and feels - STDOUT *File - STDERR *File - Stdout *File - Stderr *File + STDOUT *File + STDERR *File + Stdout *File + Stderr *File } // default values for Shell diff --git a/wget.go b/wget.go index a1ecef0..bd767d6 100644 --- a/wget.go +++ b/wget.go @@ -1,6 +1,6 @@ package shell -/* +/* This simply parses the command line arguments using the default golang package called 'flag'. This can be used as a simple template to parse command line arguments in other programs. @@ -11,17 +11,17 @@ package shell */ import ( - "io" - "os" - "fmt" "bytes" - "strings" + "fmt" + "io" "net/http" + "os" + "strings" "go.wit.com/log" ) -func Wget(url string) (*bytes.Buffer) { +func Wget(url string) *bytes.Buffer { buf := new(bytes.Buffer) // Get the data @@ -33,7 +33,7 @@ func Wget(url string) (*bytes.Buffer) { defer resp.Body.Close() log.Log(INFO, "res.StatusCode: %d\n", resp.StatusCode) - if (resp.StatusCode != 200) { + if resp.StatusCode != 200 { handleError(fmt.Errorf(fmt.Sprint("%d", resp.StatusCode)), -1) return nil } @@ -72,7 +72,6 @@ func WgetToFile(filepath string, url string) error { // package. I will quote the evilwm man page: // // BUGS: The author's idea of friendly may differ to that of many other people. -// func Write(filepath string, data string) bool { // TODO: this isn't working for some reason and is making two '\n' chars // probably because Chomp() isn't fixed yet diff --git a/windows.go b/windows.go index 7718da5..7ecffe9 100644 --- a/windows.go +++ b/windows.go @@ -1,3 +1,4 @@ +//go:build windows // +build windows // put stuff in here that you only want compiled under windows @@ -8,9 +9,6 @@ import ( "go.wit.com/log" ) -// import "go.wit.com/shell" -// import "github.com/davecgh/go-spew/spew" - func handleSignal(err interface{}, ret int) { log.Warn("handleSignal() windows doesn't do signals") } diff --git a/windowsWrapper.go b/windowsWrapper.go index e0ea2b2..2cff80d 100644 --- a/windowsWrapper.go +++ b/windowsWrapper.go @@ -3,7 +3,7 @@ package shell import ( "runtime" "strings" - + "go.wit.com/log" )