web-dev-qa-db-ja.com

条件付きPS1

私は基本的に、gitリポジトリでPS1を次のように見せようとしています。

$ ~/Projects/Blah (master):

または、Gitリポジトリにいない場合は、次のように表示します。

$ ~/Projects/Blah:

これは私の現在のPS1です。

export PS1="$ \w \$(__git_ps1): "

Git repo出力では機能しますが、問題は、git repoにいない場合、出力が次のようになることです。

$ ~/Projects/Blah :

Gitリポジトリでない場合、そのスペースは本当に必要ありません。PS1でこれを指定する方法はありますか?

3
saadq

この種のことのために私がすることは、ディレクトリを変更するときにPS1の値を変更することです。これは、chpwdコマンドを実行するzshでは簡単です。 cdとその仲間のラッパーを定義する によってbashで実行できます。

cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
  if git rev-parse --show-toplevel 2>/dev/null >/dev/null; then
    PS1='$ \w $(__git_ps1): '
  else
    PS1='$ \w: '
  fi
}

私はこの _.git-Prompt.sh_ ファイルを使用することになりました。これを機能させるための手順:

  1. ホームディレクトリ(_.git-Prompt.sh_)に_~/.git-Prompt.sh_というファイルを作成し、上記のリンクからそのファイルにコードをコピーします。
  2. _.bash_profile_または_.bashrc_ファイルに、次の行を追加します:_source ~/.git-Prompt.sh_
  3. PS1を次のように変更します:PS1='\n$ \w$(__git_ps1 " (%s)"): '
1
saadq

functionを使用してプロンプトを動的に設定します。これが私の開発環境初期化スクリプトで定義された私の特定の機能です:

function Prompt_cmd
{
  # Tell the terminal application (using escape sequences) what the CWD is.
  # (this comes from /etc/bashrc)
  update_term_cwd

  if [[ "$ORIG_PS1" == "" ]]; then
    export ORIG_PS1=$PS1
  fi

  if [[ "$CURRENT_PROJECT" == "" ]]; then
    export PS1=$ORIG_PS1
  else
    if [[ "$PWD" == "$DEV_HOME/projects/$CURRENT_PROJECT"* ]]; then
       PWD_COLOR=''
    else
       PWD_COLOR='\[\e[0;31m\]'
    fi
    export PS1="\[\e[0;32m\]$CURRENT_PROJECT\[\e[m\]:$PWD_COLOR\W\[\e[m\]$ "
  fi
}

(私がプロジェクトから外れた場合、プロンプトのパス部分が赤に設定されます!)

...次に、bashに関数を使用するように指示します。

export Prompt_COMMAND=Prompt_cmd
0
pogul