如果在控制台中键入命令,则可以正常工作。
但如果你把它们放在一个bash脚本中,就会出现问题。
#!/bin/bash
rvm use 1.8.7
rvm list # This shows the ruby used in parent shell's rvm.
答案 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作为函数加载。
答案 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进程。 1}}对您的环境所做的更新消失了。
要编写此脚本,您需要执行更多类似的操作:
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