Çoğu zaman bir komutun çıktısı yeni satır karakteri ile biter. Ancak bazen gelmez, bu nedenle bir sonraki kabuk istemi çıktı ile birlikte aynı satıra yazdırılır.
Misal:
root @ hostname [~] # echo -n merhaba
helloroot @ hostname [~] #
Bunu her zaman çok sinir bozucu buldum.
Şimdi, sadece PS1 değişkeninin başına "\ n" ekleyebilirdim, ama çoğu zaman ihtiyacım olmayan ekstra bir satır yazdıracak.
Son komutun çıktısının bir satırsonu ile bitip bitmediğini bilmek mümkün müdür?
Çözüm:
(Dennis sayesinde)
PS1='$(printf "%$((`tput cols`-1))s\r")\u@\h [\w]\$ '
$()
Bir yerde kullandın , başka bir yerde geri döndün. Her $()
ikisinde de kullanabilirsiniz .
tput cols
çünkü sadece COLUMNS değişkenin değerini çıktısını kullanmazdım , ve daha yavaş çünkü bir kabuk yerleşik değildir. Ayrıca , varsayılan durumda kopyalama ve yapıştırma sırasında bir grup sondaki boşluk almamanız için eklenen beyaz alanı silmek için \e[K
(buna eşdeğer tput el
) eklemek isteyeceksiniz . Son olarak, tüm bu büyüyü \[
ve \]
bash arasına eklemeniz gerekir, imleç konumunuzu ikinci olarak tahmin etmeye çalışır ve komutunuzu / geçmişinizi düzenlediğinizde bozulur.
PS1='\[\e[7m%\e[m$( printf "%*s" "$((COLUMNS-1))" "" )\r\e[K\]\u@\h [\w]\$ '