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は非常に個人的なので、修正することができます。
役に立ったことを願っています!