sách gpt4 ăn đã đi

go - 如何在 Go 中更改 shell 的当前工作目录?

In lại 作者:IT王子 更新时间:2023-10-29 02:36:45 29 4
mua khóa gpt4 giày nike

我想用 Go 实现 đĩa CD 命令,main.go:

hàm main() {
flag.Parse()
if flag.NArg() == 0 {
curUser, err := user.Current()
nếu err != nil {
log.Fatal(err)
}
os.Chdir(curUser.HomeDir)
// or like this
// cmd := exec.Command("cd", curUser.HomeDir)
fmt.Println(os.Getwd()) // ok in application
}
}

但是当我在 shell 中运行 go run main.go 时,它仍然没有切换到我的主目录。

那么如何通过运行 go files 在 shell 中更改我的工作目录?

code running

câu trả lời hay nhất

你不能这样做;每个子进程都有自己的从父进程继承的工作目录。在这种情况下,您的 đĩa CD 从其父级(您的 shell)获取其工作目录。子进程不能更改父进程的目录或任何其他状态。

这是基本的流程分离。允许子进程影响其父进程会产生各种安全性和可用性问题。

Shell 将 đĩa CD 实现为“特殊内置”。它不是外部二进制文件:

$ where cd
cd: shell built-in command

换句话说,当 shell 运行 đĩa CD 命令时,它与 shell 的其余部分在同一进程中运行。

shell 的 REPL 的基本逻辑类似于:

for {
line := waitForInputLine()
công tắc {
case strings.HasPrefix(line, "cd"):
os.chdir(strings.Split(line, " ")[1])

// ..check other builtins and special cases./

mặc định:
runBinary(line)
}
}

无论您使用哪种语言来实现它,都无法在外部二进制文件中实现它。

关于go - 如何在 Go 中更改 shell 的当前工作目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52435908/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress