![当当前工作目录改变时,chruby 的 Ruby $PATH 变量是否会自动改变?](https://linux22.com/image/1484286/%E5%BD%93%E5%BD%93%E5%89%8D%E5%B7%A5%E4%BD%9C%E7%9B%AE%E5%BD%95%E6%94%B9%E5%8F%98%E6%97%B6%EF%BC%8Cchruby%20%E7%9A%84%20Ruby%20%24PATH%20%E5%8F%98%E9%87%8F%E6%98%AF%E5%90%A6%E4%BC%9A%E8%87%AA%E5%8A%A8%E6%94%B9%E5%8F%98%EF%BC%9F.png)
我使用此处找到的指南安装了 Ruby 和 Rails:http://ryanbigg.com/2014/10/ubuntu-ruby-ruby-install-chruby-and-you/
值得注意的是,本指南使用 ruby-install 和 chruby 脚本来允许安装多个版本的 Ruby。我安装它的系统运行的是 Ubuntu 12.04 LTS。安装过程中的一切似乎都很顺利。
现在我目睹了一种令人困惑的行为:一旦我离开主目录,ruby 安装的所有功能都会停止工作。原因是它丢失了 chruby 添加到 $PATH 环境变量中的路径。以下是终端会话的记录,说明了 $PATH 是如何无缘无故地发生变化的:
cecil@ifrit:~$ echo $PATH
/home/cecil/.gem/ruby/2.3.0/bin:/opt/rubies/ruby-2.3.0/lib/ruby/gems/2.3.0/bin:/opt/rubies/ruby-2.3.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
cecil@ifrit:~$ ls -dF .*
./ .bash_logout .bashrc .hg/ .lesshst .pip/ .psql_history .screenrc .ssh/ .vimrc
../ .bash_profile@ .cache/ .hgignore .local/ .procmailrc* .ruby-version .selected_editor .vim/ .w3m/
.bash_history .bash_profile.ubuntu .gnupg/ .hgrc .mysql_history .profile .sc_history .sqlite_history .viminfo .wakeup*
cecil@ifrit:~$ echo $PATH
/home/cecil/.gem/ruby/2.3.0/bin:/opt/rubies/ruby-2.3.0/lib/ruby/gems/2.3.0/bin:/opt/rubies/ruby-2.3.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
cecil@ifrit:~$ cd .local
cecil@ifrit:~/.local$ echo $PATH
/home/cecil/.gem/ruby/2.3.0/bin:/opt/rubies/ruby-2.3.0/lib/ruby/gems/2.3.0/bin:/opt/rubies/ruby-2.3.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
cecil@ifrit:~/.local$ cd /var
cecil@ifrit:/var$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
cecil@ifrit:/var$ ls -dF .*
./ ../
cecil@ifrit:/var$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
cecil@ifrit:/var$ cd ~
cecil@ifrit:~$ echo $PATH
/home/cecil/.gem/ruby/2.3.0/bin:/opt/rubies/ruby-2.3.0/lib/ruby/gems/2.3.0/bin:/opt/rubies/ruby-2.3.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
cecil@ifrit:~$
只要我停留在主目录 (/home/cecil 或其中的任何路径) 下,一切就都正常,并且 $PATH 包含所选 Ruby 版本的相应路径,Ruby 可以从命令行正常工作。一旦我切换到系统上的任何其他目录,Ruby 路径就会从我的 $PATH 中删除,并且无法访问任何 Ruby 可执行文件。
我不知道是什么原因导致我的 $PATH 发生这样的变化。我甚至不知道需要什么样的丑陋钩子才能使环境变量自发地发生这样的变化。这是我无法理解的 chruby 怪癖吗?这是怎么回事?
答案1
你可能正在寻找https://github.com/postmodern/chruby/blob/master/share/chruby/auto.sh
其中包括一个trap
bash 命令和一个preexec_function
zsh 命令,用于chruby_auto
在您更改目录时运行。
所做chruby_auto
的就是查找.ruby_version
您拥有的文件,然后通过更改路径变量从该文件中设置 ruby。