Masalah PS1, mengacaukan CLI


16

Saya melakukan tugas PS1 sederhana

PS1="\e[0;31m[\W]\$ \e[m "

Yang ingin saya lakukan adalah mengubah warna prompt dan hanya menampilkan jalur relatif. Namun ini mengacaukan CLI. Misalnya, ketika menelusuri riwayat dengan itu memotong dan tumpang tindih tampilan. Ketika saya mengetik perintah panjang, kursor bergerak ke awal layar yang tumpang tindih dengan tampilan prompt itu sendiri. Apa yang telah saya lakukan salah?

Jawaban:


30

Itu karena bash mengira prompt lebih panjang dari itu. Urutan melarikan diri \e[0;31mmisalnya, akan terhisap oleh terminal, yang pada gilirannya mengubah teks berikut menjadi merah, tetapi bash tidak tahu itu. Jadi, Anda harus memberi tahu bash bahwa urutan karakter tidak boleh dihitung dalam panjang prompt, dan Anda melakukannya dengan menyertakannya \[ \]. Saya juga merekomendasikan menggunakan tput sebagai ganti urutan escape terminal hardcoding.

red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '

Lihat BashFAQ 53 dan kode Terminal (ANSI / VT100) untuk lebih lanjut.


1
Terima kasih atas deskripsi Anda yang sempurna, saya mengalami masalah ini beberapa kali dan tidak pernah tahu di mana masalahnya.
Betlista

+1, sama di sini. Bagi mereka yang secara buta menguji solusi ini dan itu tidak berhasil, ada baiknya menyebutkan di sini bahwa ada sintaks lain yang dijelaskan dalam tautan BashFAQ untuk melarikan diri warna dalam fungsi \001 \002,.
Stephen Niedzielski
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.