为什么RVM不能在bash脚本中工作,就像在交互式shell中一样?

时间:2011-03-18 13:42:56

标签: bash rvm

如果在控制台中键入命令,则可以正常工作。

但如果你把它们放在一个bash脚本中,就会出现问题。

#!/bin/bash
rvm use 1.8.7
rvm list #  This shows the ruby used in parent shell's rvm.

5 个答案:

答案 0 :(得分:8)

RVM安装的shell函数不一定导出到子shell。在shell脚本中,您可以使用.bash_profile或.bashrc中的相同命令行重新初始化RVM:

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

执行此操作后,rvm函数将在shell脚本中可用。

答案 1 :(得分:7)

在脚本中,您很可能不会将rvm作为函数加载。

http://rvm.io/rvm/basics/

答案 2 :(得分:1)

尝试在没有echo -n START; rvm use 1.8.7 ; rvm list; echo -n END的情况下运行eval,并查看其输出内容。 START和END之间的所有内容都将作为命令执行。

答案 3 :(得分:1)

rvm documentation开始,它会设置当前shell 。执行shell脚本时,您正在执行新shell进程

要编写此脚本,您需要执行更多类似的操作:

rvm

这将(希望)将您带入#!/bin/bash rvm use 1.8.7 exec /bin/bash 提供的更新环境的shell进程中,当您完成后,您只需rvm即可返回默认环境。

或者,您可以设置一个将修改当前shell环境的别名:

exit

将该行添加到alias r187="rvm use 1.8.7" .bashrc,以使其永久保留。只要您想使用.profile,请输入1.8.7。如果您愿意,也可以为不同版本设置其他版本。

答案 4 :(得分:0)

您不需要eval,如果您仍然需要它,则表示您使用不正确。我会推荐这个:

#!/bin/bash
rvm use 1.8.7
rvm list

但是,如果你真的想要eval,那就去吧:

#!/bin/bash
eval rvm use 1.8.7; rvm list