使用Ruby更改目录(带副作用?)

时间:2013-09-23 21:26:00

标签: ruby

我意识到:

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

将暂时更改为相应的目录。我的问题是:有没有办法让这种持久性?当我存在脚本时,我和我开始时保持在同一目录中。我也尝试使用反引号执行命令,但似乎所有内容都在新shell中运行。

Ruby能否更改我的shell目录?

2 个答案:

答案 0 :(得分:5)

不,这是不可能的。

实际上,没有子进程可以更改其父进程的当前工作目录。

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

答案 1 :(得分:1)

一个小小的修正:

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

更改其余脚本执行的目录。 block version of the command可以进行临时更改。


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

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

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

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