bashプロンプトの現在のパスをディレクトリごとに1文字に短縮するにはどうすればよいですか?


9

私はどこにいたか思い出せませんが、bashプロンプトの現在のパスが興味深い方法で短縮されているのを見てきました。パスに含まれるすべてのディレクトリ(最後のディレクトリを除く)は、最初の文字だけに置き換えられます。たとえば、path/to/some/directoryはに短縮されp/t/s/directoryます。

どうすればその動作を再現できますか?


でこれを直接行うことはできませんPS1PS1変数(PS1='${SHORT_PWD}\\$')を含むように設定し、その変数をで更新する必要があります$PROMPT_COMMAND
Gilles 'SO-悪をやめる'

@Gilles「SO-停止ビーイングの悪」を確認してくださいあなたは、二重引用符を使用する場合は、バックスラッシュに必要な、直接それを行うことができます\$()コマンド置換けれども
bac0n

回答:


8

これでしばらく遊んだ後、私はあなたが必要とする答えを得ました:

これをホームディレクトリの.bashrcファイルに追加し、ターミナルを終了してレンタルすると、プロンプトが表示されます。

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/\1|g'
}

プロンプトでsps()ある変数PS1が表示されるたびに、宣言された関数を使用してパスを評価します

すなわち

/ho/de/De/Ap/Ti$ pwd
/home/deth/Desktop/Apps/Tivo
/ho/de/De/Ap/Ti$ 

または...あなたが一文字を主張する場合

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/(.)[^/]*|/\1|g'
}

表示されるもの:

/h/d/D/A/T$ pwd
/home/deth/Desktop/Apps/Tivo
/h/d/D/A/T$ 

Meerに感謝します。私のプロンプトは実際にuser@pcパーツを削除しています。どうすればこれを処理できますか?
Alex

3

最後のものを除くすべてのディレクトリ名を切り捨てるには:

PS1='$(eval "sps")$ '                                                                                
sps() {                                                                                              
    python -c "import sys; dirs = sys.argv[1].split('/'); print '/'.join(d[:1] for d in dirs[:-1]) + '/' + dirs[-1]" $PWD
}

これは、ディレクトリを変更すると機能しませんか?
Aditya Varma 2017

1

Pythonなしで最後の名前を除くすべての名前を短くします。

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.