【问题标题】:does cd command in a shell script load the rvmrc inside the destination directory?shell 脚本中的 cd 命令会在目标目录中加载 rvmrc 吗?
【发布时间】:2011-06-30 04:33:23
【问题描述】:

当你有类似的东西时..

在 projectx 中给出一个 .rvmrc 文件,指定 ruby​​ 1.9.2 并在我的系统上有两个 rubies(ree-1.8.7 和 ruby​​1.9.2)

#!/bin/bash

cd applications/projectx
which ruby
ruby -v

最后两行输出 ree-1.8.7 及其路径,我不打算使用。

【问题讨论】:

  • .rvmrc 文件到底说了什么,rvm list 说了什么?您是否在 shell 的初始化文件中获取 RVM 脚本?您的 shell 配置文件中应该有类似 source ~/.rvm/scripts/rvm 的内容。

标签: ruby shell rvm cd


【解决方案1】:

是的


Rvm 确实定义了一个围绕 cd 的包装器,如下所示:

cd () 
{ 
    builtin cd "$@";
    local result=$?;
    __rvm_project_rvmrc;
    __rvm_after_cd;
    return $result
}

很难说出您的.rvmrc 为何不起作用。 Rvm 确实支持项目特定的.rvmrc 文件,但你没有发布你的。

【讨论】:

  • 他正在运行的脚本可能没有加载 rvm 声明的任何函数定义,因此他们不会有 cd 替换。他可能需要手动运行 __rvm_project_rvmrc 和 __rvm_after_cd。 Bash 还具有与其他 shell 不兼容的“export -f”功能,但由于他的脚本是 #!/bin/bash 它也可以工作。
  • 您好,感谢您的回答。显然我通过调用 cd 的脚本来解决我的问题。
【解决方案2】:

您需要在脚本中获取 rvm,当您运行脚本时,它不会加载您的 .bashrc。只需添加一行像

[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm

到脚本的开头。

【讨论】:

    【解决方案3】:

    如果您使用的是 RVM 1.7.0 或更高版本,则需要通过将此行添加到 ~/.rvmrc(或系统 .rvmrc)来启用项目特定的 .rvmrc 文件:

    rvm_project_rvmrc=1

    见:https://rvm.io/workflow/rvmrc/

    【讨论】:

      猜你喜欢
      • 2020-02-26
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 2017-05-02
      • 2015-01-01
      • 2014-08-02
      相关资源
      最近更新 更多