Skrip saya melakukan sesuatu seperti:
while :;
clear
do_a_lot_of_output_here
sleep 1
done
Apakah ada opsi untuk mencegah layar berkedip saat saya melakukan clear dan output? Saya ingin melakukannya seperti dalam watch
perintah (tapi ada tertulis C
). Ada saran?
clear | hexdump -C
00000000 1b 5b 48 1b 5b 32 4a |.[H.[2J|
00000007
PS. Saya bash
hanya menggunakan .
clear | hexdump -C
?echo -en "\ec"
flash juga?Jawaban:
Lampu kilat terjadi karena skrip menghapus seluruh layar. Jika melukis di atas teks yang ada dan membersihkan hanya sesuai kebutuhan, maka tidak akan ada berkedip.
Berikut ini sebuah contoh:
Ia melakukan ini:
ed
kemampuan terminal Anda untuk mencetak dari lokasi saat ini ke ujung layar.Jika Anda ingin menangani layar resizable, Anda bisa memindahkan tugas ke
ROWS
danCOLS
di dalam lingkaran luar, misalnya,karena
tput
meminta screensize saat ini dari sistem.Bacaan lebih lanjut:
terminfo
- basis data kemampuan terminaltput
,reset
- menginisialisasi terminal atau query terminfo databasesumber
#!/bin/bash
dan ingin menggunakanwatchit
tertanam dalam skrip kecil yang berdiri sendiri dengan beberapa fungsi, Anda dapat melakukannyaexport -f function_name; watchit function_name
.head
). Tampaknya masalah ini adalah kesalahan satu per satu (setidaknya dalam pengaturan saya - sesi ssh di panel split, iTerm2) ketika menghitung jumlah baris.ROWS=`expr $(tput lines) - 1`
mengatasinya dengan sempurna.Salah satu cara untuk membantu mencegah flashing adalah dengan mendapatkan semua output sebelum membersihkan layar sehingga ada waktu minimum antara membersihkan dan menggambar ulang itu. Ini mirip dengan konsep buffering ganda:
Ini tidak sepenuhnya menghilangkan flicker, tetapi itu terjadi secara signifikan lebih jarang dalam pengalaman saya.
sumber
clear
ke dalam buffer, yaituoutput=$(clear; do_a_lot_of_output_here)
.Lampu kilat adalah hasil yang tidak terhindarkan dari membersihkan layar setiap kali di sekitar loop. Anda dapat memindahkan kursor ke bagian atas layar dan menimpa bagian dari output lama Anda sebagai gantinya.
Script ini akan meninggalkan artefak jika output Anda menyusut. Ini juga tidak terlalu portabel. Saya hanya mengujinya dengan urxvt, xterm, dan st.
sumber
tput clear
dengan hasil yang sama (berkedip)tput ed
. Tapi itu menyebabkan berkediptput ed
tepat sebelumdo_a_lot...
baris, saya melihat berkedip di urxvt tetapi tidak xterm atau st.Sebagai perpanjangan dari jawaban Cristian, saya membuat fungsi bash berikut yang berfungsi jika jendela konsol lebih kecil dari output perintah:
Ini memungkinkan Anda untuk memberikan perintah apa pun kepada pengamat. Jika Anda menggunakan git, gunakan
git config --global color.status always
dan kemudian:Akan menampilkan keluaran status git yang selalu diperbarui.
sumber