2013-05-17 226 views
0

每次登錄我的VPS時,我必須先運行source ~/.bashrc,然後才能運行任何rvm,rubygem命令。-bash ruby​​命令未找到

這是爲什麼?無法使其默認加載?

ssh [email protected] 
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" 

回答

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

3

當您登錄時,如果Bash可以在您的主目錄中找到一個名爲.bash_profile的文件,它將執行它並且甚至不搜索.profile文件。因此,您有兩種選擇,要麼刪除空的.bash_profile文件,要麼將.profile的內容複製到.bash_profile

2

將信息從.bashrc移動到其他文件,正如別人所建議的是一種方法。

否則,這段代碼將執行相同的操作,無需移動內容或刪除文件。根據您設置的方式,您可能不想刪除文件,如果文件中包含其他任務的相關信息,而不是交互式登錄。

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

雖然使用這些文件,因爲他們打算用於閱讀文檔可以肯定減輕一些挫折感。