どこかは思い出せませんが、bashプロンプトの現在のパスが興味深い方法で短縮されているのを既に見ました。パスに含まれるすべてのディレクトリ(最後のディレクトリを除く)は、最初の文字だけで置き換えられます。たとえば、path/to/some/directory
はp/t/s/directory
に短縮されます。
どうすればその動作を再現できますか?
しばらくこれで遊んだ後、私はあなたが必要とする答えを得ました:
これをホームディレクトリの.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$
または... 1文字を主張する場合
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$
最後のディレクトリ名を除くすべてのディレクトリ名を切り捨てるには:
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
}
次のように、1文字のディレクトリのベストアンサー(Meer Borgの)正規表現が壊れています。
echo "/home/user/x/next_dir/other_dir" | sed -r 's|/(..)[^/]*|/\1|g'
/ho/us/x//ot
正しい関数は:
PS1='$(eval "sps")$ '
sps() {
echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/\1|g'
}
申し訳ありませんが、元の答えの下でコメントする評判はありません、笑