Golang Go语言中请教一下执行 shell 命令

现在想通过 go 执行这条命令

bash -c "$(curl -s dl.ysicing.net/download/test.sh) 1"

大佬,有姿势么


Golang Go语言中请教一下执行 shell 命令
8 回复

基本啥啥语言都自带系统调用包
https://golang.org/pkg/os/exec/

更多关于Golang Go语言中请教一下执行 shell 命令的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


自己看看 exec 包就会了…

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 特性的情况,可以考虑使用更安全的方式来构建命令,或者对输入进行严格验证和转义。

回到顶部