找不到-bash ruby​​命令

时间:2013-05-17 21:03:07

标签: bash shell ssh

每次登录我的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下安装了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"

3 个答案:

答案 0 :(得分:5)

来自the bash man page

  

当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

虽然通过阅读文档来使用这些文件可以肯定会减轻一些挫败感。