每次登录我的VPS时,我必须先运行source ~/.bashrc
才能运行任何rvm
,ruby
或gem
命令。
这是为什么?默认情况下不能加载它?
ssh deployer@xxx
ruby -v
-bash: ruby: command not found
source ~/.bashrc
ruby -v
ruby 1.9.3p429 (2013-05-15 revision 40747) [i686-linux]
我在deployer
下安装了rvm。
我~/.bash_pofile
是空的。我还有~/.profile
,其中包含以下内容:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
我的~/.bashrc
位于顶部:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
答案 0 :(得分:5)
当bash作为交互式登录shell或具有
--login
选项的非交互式shell调用时,它首先从文件/etc/profile
读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找~/.bash_profile
,~/.bash_login
和~/.profile
,并从第一个存在且可读的命令中读取和执行命令。
因此,在您的情况下,(空)~/.bash_profile
正在执行,您的~/.profile
(以及您的~/.bashrc
)将被忽略。要解决此问题,您需要删除~/.bash_profile
,或者将~/.profile
的内容移至~/.bash_profile
。
答案 1 :(得分:3)
当您登录时,如果Bash可以在您的主目录中找到名为.bash_profile
的文件,它将执行它,甚至不搜索.profile
文件。因此,您有两种选择,要么删除空的.bash_profile
文件,要么将.profile
的内容复制到.bash_profile
。
答案 2 :(得分:2)
按照其他人的建议将信息从.bashrc
移动到其他文件是一种方法。
否则,这段代码将执行相同的操作,无需移动内容或删除文件。根据您设置的方式,您可能不希望删除文件,如果文件中包含其他任务的相关信息,而不是交互式登录。
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
虽然通过阅读文档来使用这些文件可以肯定会减轻一些挫败感。