2011-11-14 46 views
2

我已經寫了下面的bash配置文件設置文件:Bash的配置文件設置不工作的路徑 - PS1

BLACK="\[\033[0;30m\]" 
DARK_GRAY="\[\033[1;30m\]" 
LIGHT_GRAY="\[\033[0;37m\]" 
BLUE="\[\033[0;34m\]" 
LIGHT_BLUE="\[\033[1;34m\]" 
GREEN="\[\033[0;32m\]" 
LIGHT_GREEN="\[\033[1;32m\]" 
CYAN="\[\033[0;36m\]" 
LIGHT_CYAN="\[\033[1;36m\]" 
RED="\[\033[0;31m\]" 
LIGHT_RED="\[\033[1;31m\]" 
PURPLE="\[\033[0;35m\]" 
LIGHT_PURPLE="\[\033[1;35m\]" 
BROWN="\[\033[0;33m\]" 
YELLOW="\[\033[1;33m\]" 
WHITE="\[\033[1;37m\]" 
DEFAULT_COLOR="\[\033[00m\]" 


function prompt_command { 
    # How many characters of the $PWD should be kept 
    local pwd_length=23 
    if [ $(echo -n $PWD | wc -c | tr -d " ") -gt $pwd_length ] 
    then 
     newPWD="$(echo -n $PWD | sed -e "s/.*\(.\{$pwd_length\}\)/\1/")" 
    else 
     newPWD="$(echo -n $PWD)" 
    fi 
} 
PROMPT_COMMAND=prompt_command; 

PS1="\`if [ \$? = 0 ]; 
then 
    echo -e '$PURPLE[\t] $LIGHT_CYAN\[email protected]\h$WHITE: $newPWD $GREEN$ $DEFAULT_COLOR'; 
else 
    echo -e '$PURPLE[\t] $LIGHT_CYAN\[email protected]\h$WHITE: $newPWD $RED$ $DEFAULT_COLOR'; 
fi; \`" 
export PS1; 

出於某種原因,獲得NEWPWD不工作。它存在於環境中(我可以用echo打印它),但它不會添加到命令行提示符中。總是添加一個空字符串。所以一個樣本輸出是:

[11:54:09] [email protected]: $ 

任何想法爲什麼不?


PS。這是我解決這個:

BLACK="\[\033[0;30m\]" 
DARK_GRAY="\[\033[1;30m\]" 
LIGHT_GRAY="\[\033[0;37m\]" 
BLUE="\[\033[0;34m\]" 
LIGHT_BLUE="\[\033[1;34m\]" 
GREEN="\[\033[0;32m\]" 
LIGHT_GREEN="\[\033[1;32m\]" 
CYAN="\[\033[0;36m\]" 
LIGHT_CYAN="\[\033[1;36m\]" 
RED="\[\033[0;31m\]" 
LIGHT_RED="\[\033[1;31m\]" 
PURPLE="\[\033[0;35m\]" 
LIGHT_PURPLE="\[\033[1;35m\]" 
BROWN="\[\033[0;33m\]" 
YELLOW="\[\033[1;33m\]" 
WHITE="\[\033[1;37m\]" 
DEFAULT_COLOR="\[\033[00m\]" 

export MYPATHPS='$(
    echo -n "${PWD/#$HOME/~}" | 
    awk -F "/" '"'"'{ 
     if (length() > 14) { 
      if (NF>4) print "/" "/.../" $(NF-1) "/" $NF; 
      else if (NF>3) print "/" "/.../" $NF; 
      else print "/.../" $NF; 
     } 
     else print ; 
    }'"'"' 
)'; 

PS1="$PURPLE[\t] $LIGHT_CYAN\[email protected]\h \` if [ \$? = 0 ] 
    then 
     echo -en '$GREEN' 
    else 
     echo -en '$RED' 
    fi; 
\` $MYPATHPS $ $DEFAULT_COLOR "; 
export PS1; 

enter image description here

回答

2

你需要export NEWPWD。只是因爲你可以echo它並不意味着它在環境中。它意味着它在殼體和/或環境中的位置。要知道,如果事情是在環境中我會用:

env | grep '^newPWD' 

我不知道,但我不認爲用newPWD這樣是去工作,因爲newPWD不重置每次更改目錄時像PWD是。所以你可能最終需要改變你的PS1設置,每次調用prompt_command函數。

從您的意見看起來像我的猜測newPWD是正確的。因此,您需要做的是將prompt_command功能更改爲echo您需要的提示。然後改變你的PS1設置

PS1="\`if [ \$? = 0 ]; 
       then 
        echo -e '$PURPLE[\t] $LIGHT_CYAN\[email protected]\h$WHITE: $(prompt_command) $GREEN $DEFAULT_COLOR'; 
       else 
        echo -e '$PURPLE[\t] $LIGHT_CYAN\[email protected]\h$WHITE: $(prompt_command) $RED $DEFAULT_COLOR'; 
       fi; \`" 
export PS1; 

注:我也是從$RED$$GREEN$取出後$,因爲我認爲他們是錯別字。不知道這是否正確

+0

果然,它沒有出口。但是,在COMMAND_PROMPT或/和函數本身中導出仍然沒有解決問題。我想以某種方式設置PS1,以便每次運行命令時newPWD都會更新(通過prompt_command函數)。 – Yeti

+0

已更新的答案顯示如何執行此操作。基本上改變'prompt_command'來輸出所需的提示,而不是設置一個變量。然後在'PS1'中使用'$(prompt_command)' – Sodved

+1

那麼$沒有錯字,它在查詢結束時顯示$。除此之外,你是對的。同時設法弄清楚了。實際上,它的工作原理與我發佈的一樣,只需要將「newPWD」移動到PS1的''引號之外。 – Yeti