我意识到:
Dir.chdir("/path/to/some/dir/")
将暂时更改为相应的目录。我的问题是:有没有办法让这种持久性?当我存在脚本时,我和我开始时保持在同一目录中。我也尝试使用反引号执行命令,但似乎所有内容都在新shell中运行。
Ruby能否更改我的shell目录?
答案 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不会改变目录。