如何在特定文件夹中运行Shell命令

huangapple go评论83阅读模式
英文:

How to run a shell command in a specific folder

问题

你可以使用os.Chdir()函数来指定要运行命令的文件夹。在调用exec.Command()之前,使用os.Chdir()将当前工作目录更改为你想要运行命令的文件夹。这样,exec.Command()将在指定的文件夹中运行命令。以下是一个示例代码:

package main

import (
	"fmt"
	"os"
	"os/exec"
)

func main() {
	// 指定要运行命令的文件夹路径
	folderPath := "/path/to/folder"

	// 更改当前工作目录为指定的文件夹路径
	err := os.Chdir(folderPath)
	if err != nil {
		fmt.Println("无法更改工作目录:", err)
		return
	}

	// 运行命令
	out, err := exec.Command("git", "log").Output()
	if err != nil {
		fmt.Println("无法运行命令:", err)
		return
	}

	// 输出命令结果
	fmt.Println(string(out))
}

请将/path/to/folder替换为你想要运行命令的文件夹的实际路径。

英文:

I can use this out, err := exec.Command("git", "log").Output() to get an output of the command which will run in the same path as the executable location.

How do I specify in which folder I want to run the command?

答案1

得分: 135

exec.Command() 函数返回一个类型为 *exec.Cmd 的值。Cmd 是一个结构体,其中有一个 Dir 字段:

// Dir 指定命令的工作目录。
// 如果 Dir 是空字符串,Run 函数将在调用进程的当前目录中运行命令。
Dir string

因此,在调用 Cmd.Output() 之前,只需设置它:

cmd := exec.Command("git", "log")
cmd.Dir = "你的/目标/工作目录"
out, err := cmd.Output()

还要注意的是,这仅适用于 git 命令;git 允许你使用 -C 标志传递路径,所以你也可以这样做:

out, err := exec.Command("git", "-C", "你的/目标/工作目录", "log").
    Output()
英文:

exec.Command() returns you a value of type *exec.Cmd. Cmd is a struct and has a Dir field:

// Dir specifies the working directory of the command.
// If Dir is the empty string, Run runs the command in the
// calling process's current directory.
Dir string

So simply set it before calling Cmd.Output():

cmd:= exec.Command("git", "log")
cmd.Dir = "your/intended/working/directory"
out, err := cmd.Output()

Also note that this is specific to git command; git allows you to pass the path using the -C flag, so you may also do what you want like this:

out, err := exec.Command("git", "-C", "your/intended/working/directory", "log").
    Output()

huangapple
  • 本文由 发表于 2017年3月31日 16:23:27
  • 转载请务必保留本文链接:https://go.coder-hub.com/43135919.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定