Bagaimana saya bisa menampilkan path absolut di bash prompt?

50

Saat ini saya PS1mengatur bash saya untuk sesuatu seperti ini:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\w\n\$ "

Bagaimana saya bisa membuatnya menunjukkan jalur absolut alih-alih yang relatif (misalnya, /home/dave/dirbukan ~/dir)?

David B
sumber
1
/home/dave/dirdan ~/dirkeduanya path absolut, yang kedua menggunakan singkatan untuk direktori home Anda. Path relatif adalah path yang relatif terhadap direktori Anda saat ini (misalnya ../dir) daripada memulai pada root ( /).
Doug Harris
3
ps Penggunaan warna yang bagus untuk menunjukkan status keluar dari perintah sebelumnya. Mungkin penggunaan warna pertama dalam prompt yang saya sukai.
Doug Harris
@ Doug Harris: Terima kasih atas koreksinya. Saya suka pewarnaan ini juga. Tidak ingat di mana saya pertama kali melihatnya (mungkin di beberapa pos SU sebelumnya?)
David B
\u@\H[\w]:~\$makesuser@host[~/path]:~$
JREAM

Jawaban:

49

Cukup ganti \wdengan \$PWD:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\$PWD\n\$ "

Pokoknya jika Anda keberatan sedikit tip, saya akan menulis sesuatu seperti:

PS1='\[`[ $? = 0 ] && X=2 || X=1; tput setaf $X`\]\h\[`tput sgr0`\]:$PWD\n\$ '
cYrus
sumber
4
Saya memikirkan ini juga, tetapi $PWDdievaluasi pada saat penugasan PS1, bukan pada setiap panggilan. Namun , jika Anda keluar dari tanda dolar, itu akan berhasil - \$PWD. Dengan ini, tanda dolar adalah tanda dolar pada saat penugasan dan evaluasi variabel terjadi pada setiap prompt. Memberi +1 kepada Anda.
Doug Harris
Benar, ketinggalan \, saya biasanya bekerja dengan tanda kutip tunggal jika memungkinkan. Terima kasih.
cYrus
+1 Terima kasih! bisa tolong jelaskan keajaiban di garis bash indah Anda (yang 'ujung')?
David B
Yakin. Saya menggunakan tput (lihat man tput untuk info lebih lanjut) untuk mengubah warna daripada menulis karakter kontrol secara langsung, untuk keterbacaan dan portabilitas (?). Saya juga menghapus tanda kutip ganda dan garis miring dengan menggunakan tanda kutip tunggal. Akhirnya dengan menggunakan variabel saya menghindari redundansi.
cYrus
23

Taruh di rumahmu .bashrc

PS1='\u@\h:\w\$ '
Alex
sumber
7
Kuncinya di sini adalah \wmemberikan path lengkap sementara \Whanya memberikan direktori. Lihat "Bash Prompt Escape Sequences"
zamnuts
0

di ps1 bash; -W harus relatif, dan -w absolut, jadi di atas Anda sudah memiliki absolut ?!

http://wiki.archlinux.org/index.php/Color_Bash_Prompt

Sirex
sumber
3
Saya pikir Anda membingungkan absolut | relatif dengan full | current_dir. Whanya menampilkan nama direktori saat ini, wmenunjukkan jalur lengkap, tetapi masih menggunakan jalur relatif.
David B
adalah terminologi di url, bukan milik saya :)
Sirex
0

Humm ~ / dir adalah path absolut tetapi menggunakan "jalan pintas". Sebagai contoh, jika Anda melakukan cd /usr/localprompt Anda kemungkinan besar akan menampilkan path lengkap dari / usr / local. Jadi, Anda sudah memiliki path lengkap :-)

Tapi mungkin pertanyaan Anda yang benar adalah bagaimana menampilkan path lengkap tanpa pintasan seperti ~?

Namun, saya tidak tahu jawaban untuk yang itu dan melihat pria itu, sepertinya ada (setidaknya didokumentasikan).

Huygens
sumber
0

Jalankan pwdalih-alih menggunakan \W.

Versi sederhana:

export PS1="\`pwd\` $ "

Menggunakan ini dalam kode Anda:

export PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\`pwd\`\n\$ "
Doug Harris
sumber
1
poin minor: per panduan gaya Google bash, lebih suka $ (pwd) daripada backticks karena backticks perlu melarikan diri ketika bersarang dan $ () tidak.
funroll