shell/posix.go

96 lines
1.9 KiB
Go

package shell
// old code and probably junk
import (
"os"
"os/exec"
"go.wit.com/log"
)
// TODO: look at https://github.com/go-cmd/cmd/issues/20
// use go-cmd instead here?
var callback func(interface{}, int)
// var shellStdout *os.File
// var shellStderr *os.File
// 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
// var bytesSplice []byte
func handleError(c interface{}, ret int) {
log.Log(INFO, "shell.Run() Returned", ret)
if callback != nil {
callback(c, ret)
}
}
func init() {
callback = nil
}
func InitCallback(f func(interface{}, int)) {
callback = f
}
func Unlink(filename string) bool {
if err := os.Remove(filename); err != nil {
return Exists(filename)
} else {
return Exists(filename)
}
}
// run interactively. output from the cmd is in real time
// shows all the output. For example, 'ping -n localhost'
// shows the output like you would expect to see
func RunSimple(cmd []string) error {
log.Log(INFO, "NewRun() ", cmd)
return PathRunSimple("", cmd)
}
func PathRunSimple(workingpath string, cmd []string) error {
log.Log(INFO, "NewRun() ", cmd)
process := exec.Command(cmd[0], cmd[1:len(cmd)]...)
// Set the working directory
process.Dir = workingpath
process.Stderr = os.Stderr
process.Stdin = os.Stdin
process.Stdout = os.Stdout
process.Start()
err := process.Wait()
if err != nil {
log.Log(INFO, "shell.Exec() err =", err)
}
return err
}
// return true if the filename exists (cross-platform)
// return true if the filename exists (cross-platform)
func Exists(filename string) bool {
_, err := os.Stat(Path(filename))
if os.IsNotExist(err) {
return false
}
return true
}
// return true if the filename exists (cross-platform)
func IsDir(dirname string) bool {
info, err := os.Stat(Path(dirname))
if os.IsNotExist(err) {
return false
}
return info.IsDir()
}