作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据golang文档,当您使用exec.Command()时,go不会调用系统的shell。
从“os / exec”软件包上的golang.org文档中:
与使用C和其他语言进行“系统”库调用不同,os / exec软件包有意不调用系统外壳程序,并且不展开任何glob模式或处理其他通常由外壳程序完成的扩展,管道或重定向。
这带来了问题。由于这种设计选择,您在执行命令时不能使用管道。因此,以下代码无法按预期执行。
package main
import (
"fmt"
"os/exec"
)
func main() {
exec.Command("echo", "Hello", ">>", "~/thing").Run()
cmdOut, _ := exec.Command("cat", "~/thing").Output()
fmt.Println(cmdOut)
}
package main
import (
"fmt"
"os/exec"
)
func main() {
exec.Command("bash", "-c", "echo", "Hello", ">>", "~/thing").Run()
cmdOut, _ := exec.Command("cat", "~/thing").Output()
fmt.Println(cmdOut)
}
最佳答案
第二个参数应该是一个字符串。在shell命令中,您也需要将其作为一个字符串传递。 boji也解释~
。您可以放心地假设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)
}
关于bash - 如何在Go(golang)中直接调用系统外壳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60894355/
我是一名优秀的程序员,十分优秀!