2

次の bash プロファイル設定ファイルを作成しました。

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\u$YELLOW@\h$WHITE: $newPWD $GREEN$ $DEFAULT_COLOR';
else
    echo -e '$PURPLE[\t] $LIGHT_CYAN\u$YELLOW@\h$WHITE: $newPWD $RED$ $DEFAULT_COLOR';
fi; \`"
export PS1;

何らかの理由で、newPWD の取得が機能していません。これは環境内に存在します (echo で出力できます) が、コマンド ライン プロンプトには追加されません。常に空の文字列が追加されます。したがって、出力例は次のとおりです。

[11:54:09] ber@szak:  $

アイデアはありますか?


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\u$YELLOW@\h \` if [ \$? = 0 ]
    then
        echo -en '$GREEN'
    else
        echo -en '$RED'
    fi;
\` $MYPATHPS $ $DEFAULT_COLOR ";
export PS1;

ここに画像の説明を入力

4

1 に答える 1

2

exportnewPWDが必要です。できるからechoといって、それが環境にあるとは限りません。これは、シェルおよび/または環境でのセットを意味します。私が使用する環境に何かがあるかどうかを知るには:

env | grep '^newPWD'

よくわかりませんが、ディレクトリを変更するたびにリセットされるわけではないのでnewPWD、このように使用してもうまくいくとは思いません。そのため、毎回関数を呼び出すように設定を変更する必要が生じる場合があります。newPWDPWDPS1prompt_command

あなたのコメントから、私の推測newPWDは正しかったようです。prompt_commandしたがって、関数を必要echoなプロンプトに変更する必要があります。次に、PS1設定を次のように変更します

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

注:タイプミスだと思っていたので$$RED$andの末尾も削除しました。$GREEN$それが正しかったかどうかわからない

于 2011-11-14T11:06:04.357 に答える