我意识到:
Dir.chdir("/path/to/some/dir/")
将暂时更改到适当的目录。我的问题是:有没有办法让这种持久化?当我存在脚本时,我仍然在与开始时相同的目录中。我也尝试过使用反引号执行命令,但似乎一切都在新的 shell 中运行。
Ruby 有能力改变我的 shell 目录吗?
我意识到:
Dir.chdir("/path/to/some/dir/")
将暂时更改到适当的目录。我的问题是:有没有办法让这种持久化?当我存在脚本时,我仍然在与开始时相同的目录中。我也尝试过使用反引号执行命令,但似乎一切都在新的 shell 中运行。
Ruby 有能力改变我的 shell 目录吗?
事实上,任何子进程都不能改变其父进程的当前工作目录。
当您从命令外壳执行脚本(或任何程序)时,您实际上是在执行“fork/exec”对,这意味着您创建了一个在许多方面与外壳“父进程”分开的“子进程”。孩子可以改变自己的环境,但不能(通常)改变父环境。
一个小修正:
Dir.chdir("/path/to/some/dir/")
更改其余脚本执行的目录。使用命令的块版本可以进行临时更改。
并回答您的问题:不,这是不可能的。
即使以下脚本也不起作用:
puts Dir.pwd
puts `cd ..`
puts Dir.pwd
反引号中的 -cd
命令会启动一个新环境,因此您的父级 shell 不会更改目录。