Golang调用系统命令时如何指定执行路径(切换目录)?

开发 前端
假如从代码托管平台(github、gitlab、gitee等)克隆一个Golang项目,使用Git clone完成以后,需要切换(cd)到这个项目里面去做一些操作,例如使用Go mod download安装依赖包。

场景带入

先看一个场景,假如从代码托管平台(github、gitlab、gitee等)克隆一个Golang项目,使用git clone完成以后,需要切换(cd)到这个项目里面去做一些操作,例如使用go mod download安装依赖包。

这一系列操作如果使用程序来实现的话还是有一点不同的,特别是切换到项目目录的动作。人工操作的话直接执行 cd dst-path 命令即可,使用程序调用 cd 系统命令这么做却是无效的。

Golang中的实现方法

Golang中调用系统命令的方法是这样的,以上面的git clone为例:

package main

import "os/exec"

func main() {
err := exec.Command("git", "clone", "https://github.com/xxx/test").Run()
if err != nil {
panic(err)
}
}

接下来就需要切换到这里的 test 目录去执行 go mod tidy 命令了,你可能会想到这么实现:

package main

import "os/exec"

func main() {
err := exec.Command("git", "clone", "https://github.com/xxx/test").Run()
if err != nil {
panic(err)
}

err = exec.Command("cd", "./test").Run()
if err != nil {
panic(err)
}

err = exec.Command("go", "mod", "download").Run()
if err != nil {
panic(err)
}
}

到这里你就错了,在程序里这么写是不会生效的,可以执行代码看看效果。正确的方式应该这么写:

package main

import "os/exec"

func main() {
err := exec.Command("git", "clone", "https://github.com/xxx/test").Run()
if err != nil {
panic(err)
}

cmd := exec.Command("go", "mod", "download")
cmd.Dir = "./test"
err = cmd.Run()
if err != nil {
panic(err)
}
}
责任编辑:姜华 来源: 今日头条
相关推荐

2010-06-03 11:23:19

Hadoop

2010-06-22 11:09:14

Linux At命令

2020-08-12 06:59:44

Linux切换目录命令

2009-07-31 17:21:28

linux cd命令linux cd命令详Pushd

2023-12-13 18:44:02

Linux定时任务操作系统

2009-10-27 13:10:49

linux cd命令

2009-04-15 20:32:39

Linux工作目录用户主目录

2017-03-10 10:37:16

Linux命令脚本

2020-06-04 17:00:37

Linux命令脚本

2009-09-04 09:36:17

Java调用

2023-11-17 08:02:34

系统调用linux

2020-11-06 07:42:01

Linux命令脚本

2019-07-29 09:13:04

route路由ip

2009-07-31 17:02:14

linux cd命令CDPATHlinux cd命令详

2010-01-21 09:53:55

VB.NET获取程序运

2019-11-26 08:40:16

LinuxSSHSFTP

2019-04-25 09:52:38

SSHLinux服务器

2022-12-09 11:04:14

straceLinux

2017-12-11 09:34:40

Linux启动或重启命令与脚本

2020-03-30 08:45:31

Linux命令
点赞
收藏

51CTO技术栈公众号