Sebagian besar waktu output dari perintah berakhir dengan karakter baris baru. Tapi terkadang tidak, jadi prompt shell berikutnya dicetak di baris yang sama bersama dengan output.
Contoh:
root @ hostname [~] # echo -n hello
helloroot @ hostname [~] #
Saya selalu menemukan itu sangat menjengkelkan.
Sekarang, saya bisa menambahkan "\ n" di awal variabel PS1, tetapi sebagian besar waktu itu akan mencetak satu baris tambahan yang tidak saya butuhkan.
Apakah mungkin untuk mengetahui apakah output perintah terakhir berakhir dengan baris baru atau tidak?
Solusi:
(Terima kasih kepada Dennis)
PS1='$(printf "%$((`tput cols`-1))s\r")\u@\h [\w]\$ '
$()
di satu tempat dan backticks di tempat lain. Anda bisa menggunakan $()
keduanya.
tput cols
karena itu hanya menampilkan nilai variabel COLUMNS, dan itu lebih lambat karena itu bukan shell builtin. Anda juga ingin memasukkan \e[K
(sama dengan tput el
) untuk menghapus spasi yang dimasukkan sehingga Anda tidak mendapatkan banyak spasi spasi saat menyalin dan menempel dalam case default. Akhirnya, Anda harus menyertakan semua keajaiban ini di antara \[
dan \]
atau jika bash akan mencoba menebak posisi kursor Anda dan itu akan berantakan ketika Anda mengedit perintah / sejarah Anda.
PS1='\[\e[7m%\e[m$( printf "%*s" "$((COLUMNS-1))" "" )\r\e[K\]\u@\h [\w]\$ '