你做不到
每个子进程都有从父进程继承的自己的工作目录。在这种情况下,您
cd将从其父级(您的shell)获取其工作目录。子进程无法更改父进程的目录或任何其他状态。
这是基本的过程分离。允许子进程影响其父进程将遇到各种安全性和可用性问题。
外壳实现
cd为“特殊内置”。它不是外部二进制文件:
$ where cdcd: shell built-in command
换句话说,当外壳程序运行
cd命令时,它与外壳程序其余部分的运行过程相同。
Shell的REPL的基本逻辑如下所示:
for { line := waitForInputLine() switch { case strings.HasPrefix(line, "cd"): os.chdir(strings.Split(line, " ")[1]) // ..check other builtins and special cases./ default: runBinary(line) }}无论使用哪种语言来实现,都无法在外部二进制文件中实现。



