0

每次我登录到我的 VPS 时,我都必须先运行source ~/.bashrc,然后才能运行任何rvmrubygem命令。

为什么是这样?不能默认加载吗?

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.

我有~/.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"
4

3 回答 3

5

bash 手册页

当 bash 作为交互式登录 shell 或作为带有--login选项的非交互式 shell 调用时,它首先从文件中读取并执行命令/etc/profile(如果该文件存在)。读取该文件后,它会按顺序查找~/.bash_profile~/.bash_login~/.profile,并从第一个存在且可读的文件中读取并执行命令。

因此,在您的情况下, (empty)~/.bash_profile正在执行,并且您的~/.profile(以及您的~/.bashrc)被忽略。要解决此问题,您需要删除您的~/.bash_profile,或者将 的内容移动~/.profile~/.bash_profile.

于 2013-05-17T21:16:30.597 回答
3

当你登录时,如果 Bash 可以在你的主目录中找到一个名为的文件.bash_profile,它将执行它,甚至不搜索.profile文件。因此,您有两个选择,要么删除空.bash_profile文件,要么将内容复制.profile.bash_profile.

于 2013-05-17T21:16:42.007 回答
2

根据其他人的建议,将信息从.bashrc其他文件移至其他文件是一种方法。

否则,此代码片段将执行相同的操作,而无需移动内容或删除文件。根据您设置事物的方式,您可能不想删除文件,如果它包含用于其他任务的相关信息,而不是交互式登录。

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

尽管通过阅读文档来使用它们打算使用的文件肯定可以减轻一些挫败感。

于 2013-05-17T21:30:41.070 回答