0x
0x
我也是同样问题,都考虑换框架了。
- `func shell(s string) (string, error){ //函数返回一个*Cmd,用于使用给出的参数执行name指定的程序 cmd := exec.Command("/bin/bash", "-c", s) //读取io.Writer类型的cmd.Stdout,再通过bytes.Buffer(缓冲byte类型的缓冲器)将byte类型转化为string类型(out.String():这是bytes类型提供的接口) var out bytes.Buffer cmd.Stdout = &out //Run执行c包含的命令,并阻塞直到完成。 这里stdout被取出,cmd.Wait()无法正确获取stdin,stdout,stderr,则阻塞在那了 err := cmd.Run() //checkErr(err) return out.String(), err } `
我怀疑时cmd.Wait()这个函数无法正确获取到stdin,stdout了。 docker ps -a 或进入docker其他指令-it或加上/bin/bash的时候同样也是要调用到exec的。 估计是这个原因,问题是这个问题,真不知道怎么解决
在运行shell脚本时候,有三种方式来调用外部的脚本,exec(exec script.sh)、source(source script.sh)、fork(./script.sh) 1、exec(exec /home/script.sh): 使用exec来调用脚本,被执行的脚本会继承当前shell的环境变量。但事实上exec产生了新的进程,他会把主shell的进程资源占用并替换脚本内容,继承了原主shell的PID号,即原主shell剩下的内容不会执行。 DOCKER PS -A 命令应该是以一个新的shell来进行的 ,因为新的shell集成了原主shell, 所以导致了这个问题;我认为是这样