Bagaimana saya bisa mempersingkat jalur bash prompt saat ini menjadi satu huruf per direktori?

9

Saya tidak ingat di mana, tetapi saya sudah melihat lintasan bash prompt saat ini dipersingkat dengan cara yang menarik: setiap direktori yang terdapat di lintasan (kecuali yang terakhir) diganti dengan huruf pertama saja. Misalnya: path/to/some/directoryakan disingkat menjadi p/t/s/directory.

Bagaimana saya bisa mereproduksi perilaku itu?

Anto
sumber
Anda tidak dapat langsung dilakukan di ini PS1. Anda perlu mengatur PS1agar berisi variabel ( PS1='${SHORT_PWD}\\$') dan memperbarui variabel itu di $PROMPT_COMMAND.
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles 'SO- berhenti menjadi jahat' yakin Anda dapat melakukannya secara langsung, jika Anda menggunakan penawaran ganda, Anda perlu melakukan backslash \$()pergantian perintah
bac0n

Jawaban:

8

Setelah bermain dengan ini untuk sementara waktu saya mendapatkan jawaban yang Anda butuhkan:

Tambahkan ini ke file .bashrc Anda di direktori home Anda, keluar dari terminal dan masukkan kembali dan Anda akan mendapatkan prompt.

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

Ini menggunakan fungsi yang dideklarasikan sps()untuk mengevaluasi jalan setiap kali variabel PS1yang merupakan prompt, ditampilkan

yaitu

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

Atau ... jika Anda bersikeras satu huruf

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

Yang menampilkan:

/h/d/D/A/T$ pwd
/home/deth/Desktop/Apps/Tivo
/h/d/D/A/T$ 
Meer Borg
sumber
Terima kasih meer Prompt saya sebenarnya menghapus user@pcbagian. Bagaimana saya bisa menangani ini?
Alex
3

Untuk memotong semua nama direktori kecuali yang terakhir:

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
}
askory
sumber
Ini tidak berfungsi ketika saya mengubah direktori?
Aditya Varma
1

perpendek semua nama kecuali yang terakhir tanpa python:

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
Travis S
sumber