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)?


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\$ '

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


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


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).


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\$ "

1
poin minor: per panduan gaya Google bash, lebih suka $ (pwd) daripada backticks karena backticks perlu melarikan diri ketika bersarang dan $ () tidak.
funroll
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.