Golang Go语言中请教一下执行 shell 命令
现在想通过 go 执行这条命令
bash -c "$(curl -s dl.ysicing.net/download/test.sh) 1"
大佬,有姿势么
Golang Go语言中请教一下执行 shell 命令
基本啥啥语言都自带系统调用包
https://golang.org/pkg/os/exec/
更多关于Golang Go语言中请教一下执行 shell 命令的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
exec.Command(“bash”, “-c”, “$(curl -s dl.ysicing.net/download/test.sh) 1”)
我也是这么写的,如果是多个参数应该就有问题了
lz 这是对 bash 脚本理解不到位, 换 python 估计还是达不到你的预期
可以通过设置 cmd.Stdin 实现. go 这样强制要分割参数列表传是为了安全, 避免传入的 args 里写分号造成可执行任意其他命令.
package main
import (
“os/exec”
“strings”
“log”
)
func main() {
cmd := exec.Command(“bash”)
cmd.Stdin = strings.NewReader(echo 'your command';echo 'multi command';
)
output, err := cmd.Output()
if err != nil {
log.Fatalf(“cmd.Output error:%s”, err)
}
log.Printf(“cmd ouput:\n%s”, output)
}
嗯,我也认识到了,bash 没学好
get。
谢谢🙏
在 Go 语言中执行 shell 命令,通常会使用标准库中的 os/exec
包。这个包提供了强大的功能来启动和管理外部进程,非常适合执行 shell 命令。
以下是一个简单的示例,展示如何在 Go 中执行一个 shell 命令(例如,ls
列出当前目录的文件):
package main
import (
"fmt"
"os/exec"
)
func main() {
// 创建一个新的命令
cmd := exec.Command("ls", "-l")
// 获取命令的输出
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Println("执行命令出错:", err)
return
}
// 打印命令的输出
fmt.Println(string(output))
}
在这个例子中,我们首先使用 exec.Command
函数创建了一个代表 ls -l
命令的 Cmd
结构。然后,我们使用 CombinedOutput
方法执行命令并获取其标准输出和标准错误输出。如果命令执行失败,err
将包含错误信息。
需要注意的是,直接执行 shell 命令可能存在安全风险,特别是当命令的参数来自不可信的输入时。为了避免注入攻击,应尽量避免使用 exec.Command("sh", "-c", commandString)
这样的形式,除非你能确保 commandString
是安全的。
对于更复杂的 shell 脚本或需要管道、重定向等 shell 特性的情况,可以考虑使用更安全的方式来构建命令,或者对输入进行严格验证和转义。