PS1で\wを条件付きで修正する方法は?

PS1で\wを条件付きで修正する方法は?

私がやるすべての作業はicloudディレクトリにあるので、bashプロンプトは非常に長くなります。

~/Library/Mobile Documents/com~apple~CloudDocs/Projects/foo/bar/baz @master $ 

私のヒントは次のとおりです。

PS1='\w\[\e[1;35m\]$(__git_ps1 " @%s") \[\e[1;32m\]\$\[\e[m\] '

/Library/Mobile Documents/com~apple~CloudDocs/\w inの発生を同様のものに置き換えて、icloud以下のようなより良いプロンプトを表示することは可能ですか?

~/icloud/Projects/foo/bar/baz @master $ 

答え1

Zshには、プロンプトでもほとんど自動的にディレクトリ名を短縮する「名前付きディレクトリ」機能があります。 Bashにはこれに対応する機能がないと思いますが、PROMPT_COMMAND変数を設定してusingプロンプトのinsetadに印刷するカスタム関数を実行して問題を解決できます\w

/tmp/testたとえば、パスの最初の文字をに置き換える必要があります~testdir

set_promptpath() {
    promptpath=$PWD;
    # do whatever replacement you like here
    promptpath=${promptpath/#\/tmp\/test/\~testdir}
}
PROMPT_COMMAND=set_promptpath
PS1='$promptpath\$ '

答え2

cwdパスを動的に更新する関数を使用して、@ilkkachuのいくつかの答えを使用してこの問題を解決しました。

cwd() {
    cwd=${PWD/\/Users\/htor/\~}
    echo ${cwd/\Library\/Mobile Documents\/com~apple~CloudDocs/icloud}
}
PS1='$(cwd)\[\e[1;35m\]$(__git_ps1 " @%s") \[\e[1;32m\]\$\[\e[m\] '

きれいではありませんが、少なくとも私のヒントはまたきれいです!

関連情報