2

我意识到:

Dir.chdir("/path/to/some/dir/")

将暂时更改到适当的目录。我的问题是:有没有办法让这种持久化?当我存在脚本时,我仍然在与开始时相同的目录中。我也尝试过使用反引号执行命令,但似乎一切都在新的 shell 中运行。

Ruby 有能力改变我的 shell 目录吗?

4

2 回答 2

5

不,这是不可能的。

事实上,任何子进程都不能改变其父进程的当前工作目录。

当您从命令外壳执行脚本(或任何程序)时,您实际上是在执行“fork/exec”对,这意味着您创建了一个在许多方面与外壳“父进程”分开的“子进程”。孩子可以改变自己的环境,但不能(通常)改变父环境。

于 2013-09-23T22:00:28.763 回答
1

一个小修正:

Dir.chdir("/path/to/some/dir/")

更改其余脚本执行的目录。使用命令的块版本可以进行临时更改。


并回答您的问题:不,这是不可能的。

即使以下脚本也不起作用:

puts Dir.pwd
puts `cd ..`
puts Dir.pwd

反引号中的 -cd命令会启动一个新环境,因此您的父级 shell 不会更改目录。

于 2013-09-23T21:41:04.973 回答