如何将参数正确传递给系统调用(git)?
How to pass arguments correctly to syscall (git)?
我正在尝试通过 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
并且手动执行它就可以了。但是当我 运行 它像上面的代码片段一样运行时,git 失败了:
git: 'http://github.com/some/repo.git' is not a git command. See 'git --help'.
为什么 git 将第二个参数解释为另一个命令?应该是远程<repo>
URL,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
变量。
我正在尝试通过 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
并且手动执行它就可以了。但是当我 运行 它像上面的代码片段一样运行时,git 失败了:
git: 'http://github.com/some/repo.git' is not a git command. See 'git --help'.
为什么 git 将第二个参数解释为另一个命令?应该是远程<repo>
URL,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
变量。