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.