0

bashプロンプトで2つの「高度な」ことをしようとしています。

  1. 最後のコマンドのステータスを表示したい。私の姿を見せたい
  2. 現在の git ブランチ (git リポジトリにいる場合)

私は 2 つを別々に行うことができ、「then」も実行できますが、「then」は実行できません (これは私が望んでいることです)。ステータスが機能しなくなる前に配置しようとすると、最後のコマンドのステータスに関係なく、同じ状態のままになります。/:

以下に私のものを添付し.bashrcます。ご覧のとおり、最後の 2 行は 2 つの可能性です。コメントアウトされたものは機能しないものです。

.bashrc:

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting

alias sublime="'/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl'"
alias nano="sublime"
export EDITOR="sublime"


GREEN="\[\e[32;1m\]"
YELLOW="\[\e[33m\]"
RED="\[\e[31m\]"

DEFAULT="\[\e[0m\]"
BRACKETS=$GREEN
HAPPY=$YELLOW
SAD=$RED
BRANCH=$YELLOW


function parse_git_branch () {
       git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

SUCCESS_STR="\`if [ \$? = 0 ]; then echo $HAPPY^_^$DEFAULT; else echo $SAD'O_o'$DEFAULT; fi\`"

# Nice looking bash prompt
PS1="\n$BRACKETS[$DEFAULT\u$BRACKETS]-[$DEFAULT\w$BRACKETS]\n$SUCCESS_STR$BRANCH\$(parse_git_branch) $ "
# PS1="\n$BRACKETS[$DEFAULT\u$BRACKETS]-[$DEFAULT\w$BRANCH\$(parse_git_branch)$BRACKETS]\n$SUCCESS_STR $ "
4

1 に答える 1

0

最初のポイントとして、それは私がすべての *nix で行っていることです。

これを入れてください~/.bashrc(ノイズを避けるために簡略化された PS1 ):

PROMPT_COMMAND=$(
    cat<<-'EOF'

    _temp_var=$val_ret _pipe_status="${PIPESTATUS[@]}"

    if((val_ret == 0)); then
        _temp_var=$(( $(tr -s " " "+" <<< "$_pipe_status") ))
    else
        _temp_var=$val_ret
    fi

    if((_temp_var == 0)); then
        PS1="\u@\h:\w$"
    else
        PS1="\u@\h:\w|ERROR:$_temp_var|$"
    fi
    EOF
)

それが何をするか見てください:

促す

からman bash:

PROMPT_COMMAND

設定されている場合、各プライマリ プロンプトを発行する前に、値がコマンドとして実行されます。

于 2012-10-01T13:52:04.307 に答える