为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go(golang)中直接调用系统 shell?

如何在 Go(golang)中直接调用系统 shell?

Go
阿晨1998 2022-05-23 16:41:56
根据 golang 文档,当您使用 exec.Command() 时,go 不会调用系统的 shell。来自“os/exec”包的 golang.org 文档:与来自 C 和其他语言的“系统”库调用不同,os/exec 包有意不调用系统 shell,也不扩展任何 glob 模式或处理通常由 shell 完成的其他扩展、管道或重定向。这提出了一个问题。由于这种设计选择,您在执行命令时不能使用管道。因此,以下代码不会按需要执行。package mainimport (        "fmt"        "os/exec")func main() {        exec.Command("echo", "Hello", ">>", "~/thing").Run()        cmdOut, _ := exec.Command("cat", "~/thing").Output()        fmt.Println(cmdOut)}它不是打印出应该包含单词“Hello”的文件的内容,而是打印出一个空白的换行符。我试过像这样直接调用bash:package mainimport (        "fmt"        "os/exec")func main() {        exec.Command("bash", "-c", "echo", "Hello", ">>", "~/thing").Run()        cmdOut, _ := exec.Command("cat", "~/thing").Output()        fmt.Println(cmdOut)}但是,这会产生与原始代码相同的结果。使用golang时如何直接调用系统shell?
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

第二个参数应该是一个字符串。在 shell 命令中,您也需要将其作为一个字符串传递。也~由 bash 解释。你可以放心地假设它sh存在。Bash shell 不是必须的。


package main                                                                                                                                                              


import (                                                                                                                                                                  

 "fmt"                                                                                                                                                                    

 "os/exec"                                                                                                                                                                

)                                                                                                                                                                         


func main() {                                                                                                                                                             

 exec.Command("sh", "-c", "echo Hello >> ~/thing").Run()                                                                                                                  

 cmdOut, _ := exec.Command("sh", "-c", "cat ~/thing").Output()                                                                                                            

 fmt.Println(cmdOut)                                                                                                                                                      

}


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 334 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号