PS1 sorunu, CLI'yi bozuyor


16

Basit bir PS1 ödevi yaptım

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

Tüm yapmak istediğim, komut istemi rengini değiştirmek ve yalnızca göreceli yolu görüntülemekti. Ancak bu CLI'yi berbat ediyor. Örneğin, geçmişle birlikte göz atarken ekranı kırpır ve üst üste getirir. Uzun bir komut yazdığımda imleç, bilgi istemi ekranıyla örtüşen ekranın başına gider. Neyi yanlış yaptım?

Yanıtlar:


30

Çünkü bash istemin olduğundan daha uzun olduğunu düşünür. Kaçış dizisi \e[0;31m, terminal tarafından emilir, bu da aşağıdaki metni kırmızıya çevirir, ancak bash bunu bilmez. Bu nedenle, bash'a, bu karakter dizisinin istemin uzunluğunda sayılmaması gerektiğini ve bunu bunu içine alarak yapmalısınız \[ \]. Ayrıca sabit kodlama terminali kaçış dizileri yerine tput kullanılmasını öneriyorum.

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

Daha fazla bilgi için BashFAQ 53 ve Terminal kodları (ANSI / VT100) girişine bakın.


1
Mükemmel açıklamanız için teşekkürler, bu sorunu birkaç kez yaşadım ve sorunun nerede olduğunu asla bilmiyorum.
Betlista

+1, burada da aynı. Bu çözümü körü körüne test edenler ve işe yaramazsa, burada işlevler içindeki renklerden kaçmak için BashFAQ bağlantısında açıklanan başka bir sözdiziminin olduğunu belirtmek gerekir \001 \002.
Stephen Niedzielski
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.