Go 在新目录中打开Shell

Go 在新目录中打开Shell,go,Go,我正试图将我的shell cd放入一个目录中。有更好的方法吗?这种方式唯一的问题是我的shell是当前shell的子进程。让我不得不退出两次 package main func main(){ err = syscall.Chdir(os.Getenv("HOME") + "/dev") exitIfErr(err) err = syscall.Exec(os.Getenv("SHELL"), []string{""}, os.Environ()) exitIfErr(err)

我正试图将我的shell cd放入一个目录中。有更好的方法吗?这种方式唯一的问题是我的shell是当前shell的子进程。让我不得不退出两次

package main

func main(){
  err = syscall.Chdir(os.Getenv("HOME") + "/dev")
  exitIfErr(err)
  err = syscall.Exec(os.Getenv("SHELL"), []string{""}, os.Environ())
  exitIfErr(err)
}
您可以改为使用来更改目录:

func Chdir(dir string) error
Chdir将当前工作目录更改为命名目录。如果有错误,则类型为
*PathError


关于exec,我建议使用这个包来运行您的子进程。它尽可能地整理了*nix系统甚至windows系统之间的各种可移植性细微差别

您可能会遇到的另一个问题是,
SHELL
环境变量在Windows.Wait上不可用。但是您不想从shell执行,用Go进程替换外壳进程吗@你是对的。我只想告诉我的外壳进程更改目录。那么我该怎么做呢?我不认为你所要求的,从子进程直接变异父进程是可行的。一方面,这将打破进程隔离。目前我能想到的最好的方法是通过shell exec用Go程序替换父shell进程,而Go程序通过您目前正在进行的
exec
调用用新的shell进程替换其进程。但是,如果您要经历所有这些麻烦,为什么不直接从父shell进程
cd