Bash PS1 özelleştirilmiş isteminde uzun çizgiler çakışıyor


13

PS1Sunucu adı, zaman, kullanıcı adı ve diğer faydalı değişkenlerle süslü iki satırlı bir bash istemi yapılandırdım .

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

resim açıklamasını buraya girin

Tam Github kaynağı burada .

Sorun şu ki, uzun çizgiler genellikle kendi etraflarına sarılır, yani yeni çizgi bir öncekiyle örtüşür.

Sorun tutarsız: bazı satırlar doğru şekilde sarılmış, bazıları değil.

Bunu nasıl düzeltebileceğine dair bir fikrin var mı?

Yanıtlar:


16

İşte bash istemi için süslü iki satırlı PS1.

PS1

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

İşte yaptığım şey. Bu benim rengim olsaydı:

\e[1;32m

Bunu şöyle değiştirdim:

\[\e[1;32m\]

Esasen içine eklemeniz gerekir:

\[$mycolor\]

Bu cevaba göz atın .


+1 Teşekkürler. İşin garibi, mac üzerinde çalışmıyor gibi görünüyor.
Adam Matan

Sen bir hayat kurtarıcısın! Mac gelince, Adam .. Büyük olasılıkla sütun sayımı nedeniyle. İstemi yalnızca 'bu benim istemim:' gibi bir karakter dizesine ayarlamayı deneyin ve sorunun devam edip etmediğini görün. Öyleyse, terminalinizdeki sütun ayarınız çok geniş veya çok dar.
Alex Summers

7

Bulunan bu çözümü renk değişkenlerine bir kapanış parantez önerdi hangi çevrimiçi:

Bunu değiştir:

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

için:

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

Değişikliği taahhüt ettim - umarım beklendiği gibi çalışır.


1
bunun ne elde edeceğinden emin değilim. İçinde yer kaplamayan (ansi kaçışları) herhangi bir şeyi sarmanız gerekir \[ \], böylece tüm ansi kaçış renklerini sadece sona erdiremezsiniz \]çünkü ne değilse \[. Yazdırılamayan karakterleri koyarken, bunları sadece sarmanız gerekir \[ \](örn. PS1='\[\e[32;1m\] green prompt \[\e[0m\] $').
dylnmc

Aslında! Açılış olmadan \ [, bu bize linux kullanıcıları için istemi bozar. Belki OSX için farklıdır? Ne kadar garip. \ [ve \ e [linux için iki farklı şey olarak yorumlanır. Birincisi, aşağıdaki dizinin yazdırılamaz olduğunu ve istemin görüntülenen karakterlerinin bir parçası olarak sayılmamasını belirtir. \ E [, bir ANSI renk şemasını başlatmak için çıkış dirseğidir.
Alex Summers

0

PS1 bashında uzun çizgiler çakışması konusuna tercih ettiğim çözüm \n, PS1 istem satırlarının sonunda bir a sahip olmaktır .

Örneğin

resim açıklamasını buraya girin

Diğer tüm öğelerimi istiyorsanız - zaman, kullanıcı, ana bilgisayar, dizin ve git dalı (!) Bunu kullanabilirsiniz (mac veya linux):

/unix//a/124012/10043


git şubesi için kullanmalısınız if [[ $(git rev-parse --is-inside-git-dir 2> /dev/null) ]]; then branch="$( git symbolic-ref --short -q HEAD 2> /dev/null )"; fi. Git bir betik içine koyarak ve daha önce okuduğumdan şube adını değerlendirirken bu bir standarttır.
dylnmc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.