Pertanyaan Garis panjang tumpang tindih di Bash PS1 prompt disesuaikan


Saya telah mengkonfigurasi dua baris mewah PS1 bash prompt, dengan nama server, waktu, nama pengguna dan variabel berguna lainnya.

PS1="\n\[\033[1;34m\]\342\226\210\342\226\210 \u @ $SERVER_NAME""$BBlue"" \w""$Color_Off  \n\[\033[0;36m\]\342\226\210\342\226\210 \d \t $ \[\033[0;39m\]"

enter image description here

Sumber Github lengkap sini.

Masalahnya adalah garis panjang sering kali melilit diri mereka sendiri, yang berarti bahwa garis baru itu tumpang tindih dengan yang sebelumnya.

Masalahnya tidak konsisten: beberapa garis dibungkus dengan benar, ada yang tidak.

Tahu bagaimana cara memperbaikinya?


13
2018-02-04 10:04


asal




Jawaban:


Berikut ini adalah dua baris PS1 saya untuk bash prompt.

PS1

\[\e[1;32m\]\H\[\e[0m\] :: \[\e[1;30m\]\d\[\e[0m\] \@ :: \[\e[1;33m\]\w\n\[\e[1;34m\]\u $ \[\033[0m\]

Jadi inilah yang saya lakukan. Jika ini warna saya:

\e[1;32m

Saya mengubahnya menjadi:

\[\e[1;32m\]

Pada dasarnya Anda perlu menyertakannya dalam:

\[$mycolor\]

Lihat ini menjawab.


14
2018-02-25 14:12



+1 Terima kasih. Anehnya, itu tidak bekerja di mac. - Adam Matan
Anda seorang penyelamat hidup! Adapun mac, Adam .. Kemungkinan besar karena jumlah kolom. Coba atur prompt ke hanya string karakter, seperti 'ini adalah prompt saya:' dan lihat apakah masalah tetap ada. Jika demikian, pengaturan kolom Anda di terminal Anda terlalu lebar atau terlalu sempit. - Alex Summers


Ditemukan solusi ini online, yang menyarankan tanda kurung tutup untuk variabel warna:

Ubah ini:

Black='\e[0;30m'        # Black
Red='\e[0;31m'          # Red
Green='\e[0;32m'        # Green

untuk:

Black='\e[0;30m\]'        # Black
Red='\e[0;31m\]'          # Red
Green='\e[0;32m\]'        # Green

Saya sudah melakukan perubahan - berharap itu berhasil seperti yang diharapkan.


7
2018-02-04 11:47



tidak yakin apa yang harus dicapai ini. Anda perlu membungkus apa pun yang tidak memakan ruang (ansi-escape) di dalamnya \[  \], jadi Anda tidak bisa hanya mengakhiri semua warna pelarian ansi dengan \] karena bagaimana jika tidak ada \[. Ketika Anda memasukkan karakter yang tidak bisa dicetak, Anda harus membungkusnya \[  \] (misalnya. PS1='\[\e[32;1m\] green prompt \[\e[0m\] $'). - dylnmc
Memang! Tanpa bukaan \ [, ini boshes prompt bagi kita pengguna linux. Mungkin itu berbeda untuk OSX? Aneh sekali. \ [dan \ e [ditafsirkan sebagai dua hal berbeda untuk linux. Yang pertama menunjukkan untuk bash bahwa urutan berikut tidak dapat dicetak dan tidak menghitungnya sebagai bagian dari karakter yang ditampilkan dari prompt. The \ e [adalah tanda pelarian untuk memulai skema warna ANSI. - Alex Summers


Solusi pilihan saya untuk masalah garis panjang tumpang tindih di bash PS1 adalah memiliki \n pada akhir baris cepat PS1.

misalnya

enter image description here

Jika Anda ingin semua barang saya yang lain - waktu, pengguna, host, direktori dan git branch (!) Anda dapat menggunakan ini (mac atau linux):

https://unix.stackexchange.com/a/124012/10043


0
2017-09-23 22:04



untuk cabang git yang harus Anda gunakan if [[ $(git rev-parse --is-inside-git-dir 2> /dev/null) ]]; then branch="$( git symbolic-ref --short -q HEAD 2> /dev/null )"; fi. Ini adalah standar ketika memasukkan git ke dalam skrip dan mengevaluasi nama cabang dari apa yang telah saya baca sebelumnya. - dylnmc