0

我对 Dir.chdir("/xyz") 很熟悉

不幸的是,这改变了进程的目录,但实际上并没有改变用户的目录。我将制作以下示例来说明我的需求。

$~/: ruby my_script.rb
CHANGING TO PATH FOR USER NOT SCRIPT

$/Projects/Important/Path: pwd
$/Projects/Important/Path

看?我需要脚本来更改用户的路径。执行 system/backticks/Dir.chdir 都会调整进程路径,并以用户坐在他们开始的地方结束,而不是我想要的路径。

从我所读到exec的是要走的路,因为它接管了现有的流程……但无济于事。

4

2 回答 2

0

你不能,但你可以做一些可能足够好的事情。您可以从 ruby​​ 调用另一个 shell:

Dir.chdir("/xyz")
system("bash")

运行此程序将创建一个的bash 进程,该进程将在/xyz目录中启动。不利的一面是,更改此过程将使您回到 ruby​​ 脚本,并假设它立即结束 - 回到启动 ruby​​ 脚本的 bash 进程。

于 2013-07-07T23:35:08.310 回答
0

另一个可能有效的技巧是将提示符用作将在每个命令之后调用的 hackish 钩子。在 ruby​​ 脚本中,您可以将新目录的路径写入可以从 bash 和 ruby​​ 读取的位置(例如文件 - 但不是环境变量!)。在PROMPT_COMMAND函数中,您检查该文件以及cd其中写入的内容。只要确保您删除了该文件,这样您就不会cd在运行每个命令后自动编辑该文件。

于 2013-07-07T23:45:04.893 回答