gpt4 book ai didi

go - 如何将参数正确传递给系统调用(git)?

转载 作者:IT王子 更新时间:2023-10-29 01:42:34 25 4
gpt4 key购买 nike

我正在尝试通过 syscall 调用 git 来克隆一个 git 存储库. (我知道有 git2go 但这不是我想要的。我绝对想做一个 syscall )

git, lookErr := exec.LookPath("git")

if lookErr != nil {
fmt.Fprintf(os.Stderr, "%s\n", lookErr)
os.Exit(126)
}

args := []string{"clone", "http://github.com/some/repo.git"}

var env = os.Environ()

execErr := syscall.Exec(git, args, env)

if execErr != nil {
panic(execErr)
}

所以我要执行的是git clone http://github.com/some/repo.git手动执行这个就可以了。但是当我像上面的代码片段一样在 go 中运行它时,git 失败了:

git: 'http://github.com/some/repo.git' is not a git command. See 'git --help'.

为什么 git 会将第二个参数解释为另一个命令?应该是 Remote <repo>网址,git clone [options] [--] <repo> [<dir>] .

如何正确传递参数,以便 git 具有预期的行为?

最佳答案

argv 的第一个参数通常是一个程序的名称,所以只需将其添加到那里即可:

args := []string{git, "clone", "http://github.com/some/repo.git"}
var env = os.Environ()
if err := syscall.Exec(git, args, env); err != nil {
panic(err)
}

另请参阅:os.Args变量。

关于go - 如何将参数正确传递给系统调用(git)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31762246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com