开发者

Sourcing rvm from my Ubuntu .profile only works manually, not at login

开发者 https://www.devze.com 2023-01-21 06:32 出处:网络
I\'m having trouble getting the Ruby Version开发者_Python百科 Manager rvm to source from my Ubuntu 10.04 .profile. The code:

I'm having trouble getting the Ruby Version开发者_Python百科 Manager rvm to source from my Ubuntu 10.04 .profile. The code:

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

...never does what I expect it to (i.e. give me the rvm program when I open a new shell or start a new session); but if I execute

source .profile

in a new shell after logging in, it works! Why will it work when I manually source it, but not automatically at login?


It would appear that Ubuntu handles it's logon scripts differently than most other linux distros

http://ubuntuforums.org/showpost.php?p=9127226&postcount=6

The above post has hints that GDM logins in Ubuntu don't process .bash_profile or .profile the way most other linux distros do. I have had to put the line loading RVM in the ~/.bashrc and that has not caused any problems yet.


Sourcing $HOME/.rvm assumes you have installed RVM a single user, specially, the user whose home directory is $HOME. Likely, on your Ubuntu system, RVM has been installed system wide, and thus you must source the RVM scripts as such:

In your .bashrc file add:

\# Set rvm path

[[ -s "/usr/local/rvm/scripts/rvm" ]] && source "/usr/local/rvm/scripts/rvm"

before this line; this line will exit and not execute anything past it, which is fine for interactive logins, bit would be a problem is you are using non-interactive SSH logins for automation purposes.

\# If not running interactively, don't do anything

[ -z "$PS1" ] && return


The RVM installation page has a series of things to check to test the initialization of RVM. Read the "Troubleshooting your Install" section at the end of the RVM installation page.

Also, here's a description of how Bash reads its startup files which can help with this sort of problem.


I had a problem with Atom editor not picking up RVM environment and thus not finding rubocop command on Ubuntu 16.04. But the problem was not there when I started Atom from gnome terminal. What I've found was that RVM script ~/.rvm/scripts/rvm that you're supposed to be loading in your .profile has these lines at the beginning:

if
  builtin test -n "${BASH_VERSION:-}" -o -n "${ZSH_VERSION:-}" -o -n "${KSH_VERSION:-}"
then
  ...
else
  return 0
fi

Strangely, when executed at login, I've found $BASH_VERSION to be empty (while in gnome terminal it's sth like 4.3.46(1)-release), so the script would do early return leaving RVM not loaded properly. I tried to set BASH_VERSION to whatever and it worked fine.

Here is the complete code from my .profile that loads RVM:

local rvm_home="${HOME}/.rvm"
export PATH="$PATH:${rvm_home}/bin"
if [ -z "$BASH_VERSION" ]; then
    export BASH_VERSION=4
fi
source "${rvm_home}/scripts/rvm"
0

精彩评论

暂无评论...
验证码 换一张
取 消