gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:19:17 26 4
gpt4 key购买 nike

我想用 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 命令运行。

最佳答案

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

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

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

关于shell - 以可移植的方式以编程方式更改 shell 的 cwd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6115952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com