以可移植的方式以编程方式更改 shell 的 cwd

Al *_* S. 3 shell cmd batch-file

我想用 C 编写一个命令行工具,作为可以移植到 Windows/Mac/Linux 的高级“cd”或“pushd/popd”命令。(完整的细节,如果你好奇,在http://alsweigart.tumblr.com/post/4008393181/command-line-idea-up

问题是,当用户从 shell 运行程序时,更改当前工作目录将更改程序的 cwd,而不是 shell 的 cwd。

有没有办法编写程序来做我想做的事,还是我必须求助于编写 bash 脚本/批处理文件?

或者,有没有办法通过管道将程序的输出作为 shell 命令运行?即该程序输出“cd /foo/bar”,一个shell 脚本调用该程序并将其输出作为shell 命令运行。

Gre*_*ill 5

一般来说,一个进程不能改变另一个进程的当前目录(在 Windows 和 Unix 系统上都是如此)。因此,作为 shell 之外的单独进程运行的程序不能更改 shell 的当前目录。

您可能必须使用批处理文件和/或 shell 脚本的某种组合来完成您想要执行的操作。请注意,尽管 Windows 批处理文件可以更改它们运行所在的 shell 的当前目录,但这不适用于 Unix 上的 shell 脚本。在 Unix 的情况下,您可能希望使用 shell函数,它们确实在同一进程中运行。请注意,编写 shell 函数是特定于 shell 的,因此您也必须将程序移植到您想要支持的每个 Unix shell。

在某些 Unix shell 上,您可以使用该.命令使 shell 脚本在当前 shell 的上下文中运行。如果您的 shell 支持,您可以使用 shell 别名来运行它,这样您就不必.在命令前面键入。