ksh88の$ PS1に分岐名を表示する

ksh88の$ PS1に分岐名を表示する

ksh88のプロンプトに現在のgitブランチを表示したいと思います。

私は強制ksh88シェルを使用してIBM AIXで実行されているバックエンドを使用してレガシープロジェクトを進めています。一部のタスクでは代わりにbashを使用できますが、ほとんどの日常操作ではksh88を使用する必要があります。 (シェル変更作業を進めていますが、これは非常に遠く、ほとんど不可能です。)

だから私はこの(単純化された)バリアントを使用しています。すべて動作しますが(現在のブランチを表示します)、それらのどれも動的ではありません。ブランチを切り替えても、同じブランチが表示されます。

export GIT_BRANCH=$(git branch 2>/dev/null | grep '^*' | colrm 1 2)
export PS1="\$GIT_BRANCH - $ "

また

get_git_branch(){
    print -- git branch 2>/dev/null | grep '^*' | colrm 1 2
}
export PS1="$(get_git_branch) - $"

どちらの場合も、更新するには実行中の.profileを再ロードする必要があります. ~/.profileが、これは実用的ではありません。

$ PWD(フルバージョンexport PS1)を追加すると、現在のディレクトリを変更すると変更されます。

私はここで読んだ(各プロンプトの前に実行するコマンドをどのように設定しますか?)特定の式を拡張するトリックがあるかもしれませんが、数値式にのみ当てはまります。

私これを見たことがある(今では最善の希望だ) 動的ラインを使用したSolaris KSH設定PS1しかし、それを私の問題に適用する方法をよく理解していません。

私が使用できる他のトリックはありますか?

ベストアンサー1

パズル作業をしました。

a) ksh93を使う

b)これらのエイリアスは、プロンプトに分岐情報を含めないようにリセットする方法(必要に応じて)に関するアイデアを提供します。

  • .profileに以下を追加しました。
ENV=~/.kshrc
export ENV
  • 私は別名を.kshrcに保持することにしました(上記を参照)。コアラインは次のとおりです。
# alias to reset PS1
alias psr="PS1=$LOGNAME@`hostname`:'\[\${PWD##*/}\]'"
# alias to set PS1 to dynamically check for git branch active, or not
alias psgit="PS1=${LOGNAME}@$(hostname -s)'\[\${PWD##*/}\]{\$(git branch 2>/dev/null| grep \"^*\" | colrm 1 2)}'"

あなたの質問を借りました!

私のデフォルトのシェルは通常のksh(88)です。ログインして、次のように、よりクールなシェルに切り替えます。

aixtools@x064:[aixtools]aixpb
aixtools@x064:[Playbook]psgit
aixtools@x064[Playbook]{$(git branch 2>/dev/null| grep ^* | colrm 1 2)}export PS1
aixtools@x064[Playbook]{$(git branch 2>/dev/null| grep ^* | colrm 1 2)}ksh93
aixtools@x064[Playbook]{master}
aixtools@x064[Playbook]{master}git checkout aixpb_main00
Updating files: 100% (44/44), done.
Switched to branch 'aixpb_main00'
Your branch is up to date with 'aixtools/aixpb_main00'.
aixtools@x064[Playbook]{aixpb_main00}cd
aixtools@x064[aixtools]{}

タイプミス(「:」がありません)があります。しかし、多くのPS1は非常に個人的なので、修正することができます。

役に立ったことを願っています!

おすすめ記事