2011-11-14 17 views
2

:NEWPWDを取得するいくつかの理由バッシュプロフィール - 私は、次の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; 

が機能していません。それは環境に存在します(私はエコーで印刷することができます)。しかし、コマンドラインプロンプトには追加されません。空の文字列が常に追加されます。したがって、サンプル出力は次のとおりです。

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


PS。あなたがNEWPWD exportに必要

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

:ここでは、これに対する私のソリューションです。ただあなたはechoすることができますので、それは環境では意味しません。それは、そのシェルや環境の中のそのセットを意味します。何かが、私が使用する環境にあるかどうかを知るには:

env | grep '^newPWD' 

newPWDは、あなたがディレクトリを変更するたびにリセットされないよう、私はよく分からないが、私はこのようにnewPWDを使用して動作するように起こっていることはないと思いますPWDのようです。したがって、毎回prompt_command関数を呼び出すようにPS1の設定を変更する必要が生じる場合があります。

あなたのコメントから、newPWDについての私の推測のように見えます。ですから、prompt_command関数をechoに変更して、必要なプロンプトを表示します。その後

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; 

注意にあなたのPS1設定を変更します。私は、彼らがタイプミスだったと仮定として、私も$RED$$GREEN$から後続$を削除しました。それが正しいかどうかわからない

+0

確かにそれはエクスポートされませんでした。しかし、COMMAND_PROMPTまたは/および関数自体のexportinは、まだ問題を解決していませんでした。私は何とかPS1を設定して、コマンドを実行するたびにnewPWDが(prompt_command関数によって)更新されるようにしたいと思います。 – Yeti

+0

答えを更新してこれを行う方法を示します。基本的に 'prompt_command'を変更して、変数を設定するのではなく、目的のプロンプトを出力します。 'PS1'に' $(prompt_command) 'を使用してください。 – Sodved

+1

これは誤字がないので、クエリの最後に$を表示します。これ以外にあなたは正しいです。その間にそれを把握することができました。実際には私が投稿したときに動作し、$ newPWDをPS1の ''引用符の外に移動する必要があります。 – Yeti

関連する問題