go语言exec.Command方法

公司有块内容是go语言编写的,go这块不是很懂想问下底下这个exec.Command方法是去linux里面执行指定的shell语句,那实际执行的时候是在linux的哪个目录执行的呢

img

/usr/bin

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/1019392
  • 除此之外, 这篇博客: go语言调用另一个可运行的go程序并以命令行传参数中的 1、调用别的程序文件(exec.Command) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • package main
    
    import (
    	"fmt"
    	"os/exec"
    )
    
    func checkError(err error){
    	if err != nil{
    		panic(err)
    	}
    }
    func main(){
    	cmd := exec.Command("./../other/other","hello","world")
    	data,err := cmd.Output()
    	checkError(err)
    	fmt.Println(string(data))
    }
    
    
  • 以下回答由chatgpt基于相关博客总结生成:

    根据参考资料,exec.Command()方法是用来在Linux系统中执行特定的shell命令。当命令执行时会在当前工作目录下运行,并输出结果。因此,如果想要控制命令执行时所在的目录,需要在命令中添加对应的工作目录参数。

    例如,如果想要在 /home/user 目录下执行命令,可以在命令中添加 -C 参数,如下所示:

    cmd := exec.Command("ls", "-al", "-C", "/home/user")
    

    另外,也可以在 exec.Command() 方法执行之前,通过 os.Chdir() 方法先改变当前工作目录,然后再执行命令:

    err := os.Chdir("/home/user")
    if err != nil {
        // 处理错误
    }
    cmd := exec.Command("ls", "-al")
    

    这样执行的命令会在 /home/user 目录下运行。需要注意的是,如果命令中使用了相对路径,当前工作目录的改变也会影响到命令中相对路径的解析。

    如果想要获取命令执行的结果,同样可以使用 CombinedOutput() 方法获取输出,如果想要实时获取执行结果,则可以使用参考资料中提到的管道方法实现。