Bagaimana saya keluar dari atas tanpa meninggalkan output di terminal?

30

Bagaimana saya bisa topkeluar dengan cara yang sama dengan cara lessberhenti, yaitu tidak meninggalkan outputnya di layar?

Ini adalah versi yang saya miliki:

procps-ng version 3.3.9
Arraval
sumber
Bagaimana kalau menggunakan alternatif, misalnya htop?
DarkHeart

Jawaban:

48

Ketika Anda memulainya seperti ini ...

top && clear

... layar bersih setelah keluar atas dengan q.

Ini bertindak lebih seperti less:

tput smcup ; top ; tput rmcup

( smcupberalih ke layar sekunder tempat topperintah dijalankan dan ketika Anda berhenti top rmcupberalih kembali ke layar normal)


Anda bisa alias perintah teratas untuk melakukan itu ( Bagaimana cara membuat alias Bash permanen? )

Rinzwind
sumber
3
cleartampaknya menghapus semua kecuali layar terakhir dari buffer scrollback juga (jadi hanya meninggalkan layar terakhir atas dalam kasus ini) - setidaknya di xfce4-terminal dan QTerminal. The tputjawaban karya besar, terutama dalam alias untuktop
Xen2050
2
Jangan lupa Ctl + L untuk perbaikan cepat.
jpaugh
Oh Menarik; Saya bertanya-tanya mengapa lesskeluaran terakhir benar-benar hilang dari buffer.
Lightness Races dengan Monica
Beberapa saran lain: 1. gunakan perintah far-superior-but-not-built-in htop, dan 2. bersama-sama sehingga Anda tidak perlu mengaitkannya secara manual setiap kali.
flith
@ Flith saya tidak akan mencuri jawaban pengguna lain ;-)
Rinzwind
31

Ironisnya 1 , ini adalah perilaku singkattop . Dalam 3.3.8, topapakah menghapus layar, tetapi tidak dalam versi masa lalu atau sejak. Lihat Red Hat bug # 977561 :

Kliring layar adalah hasil tidak langsung dari perubahan manipulasi terminal yang diperkenalkan oleh Jim Warner (penulis alat 'atas') untuk menekan banjir alat 'atas' dengan sinyal SIGWINCH yang dihasilkan oleh beberapa aplikasi terminal yang banyak digunakan. Itu saya yang melaporkan masalah banjir dan dia mencoba melakukan yang terbaik untuk menyelesaikannya dan merilis perbaikan untuk masalah ini dalam bentuk 8 komitmen terpisah. Komit yang memperkenalkan pembersihan layar memiliki hash berikut: 'dedaf6e1a81738ff08ee8e8523871e12f555ad6d'.

Karena laporan bug, Jim kemudian memperbaikinya untuk tidak menghapus output di 3.3.9 .

toptidak memiliki opsi atau pengaturan konfigurasi untuk mengontrol ini, AFAICT, ini sepenuhnya merupakan perilaku hardcoded. Anda mungkin ingin mengajukan permintaan fitur di https://gitlab.com/procps-ng/procps/issues/ .

Sampai saat itu, Anda bisa clearsecara manual seperti yang disarankan Rinzwind , atau gunakan tputseperti yang disarankan steeldriver.


Menariknya, komit yang disebutkan di atas juga memiliki penjelasan yang bagus tentang perintah steeldriver yang disarankan, karena sebenarnya sama dengan apa yang awalnya dilakukan dalam kode:

Sebuah buffer scrollback yang digunakan di beberapa terminal emulator dapat menjadi ketidaknyamanan yang nyata bagi pengguna setelah beberapa operasi pengubahan ukuran. Ekstra keystroke sering diperlukan untuk membuat tampilan top dengan benar.

Setelah melakukan banyak pencarian, kami menemukan dua string terminfo yang memiliki efek menonaktifkan / mengembalikan buffer gulir mundur. Mereka tersembunyi di bawah judul string 'untuk memulai / mengakhiri program menggunakan cawan'. Pada gilirannya, 'piala' berkaitan dengan kemampuan penanganan kursor tty.

Kami tidak peduli apa yang Anda sebut mereka atau apa yang mereka rujuk selama mereka menyelesaikan pekerjaan. Dan ini benar-benar terjadi! Harap diperhatikan, bahwa ada beberapa efek samping, beberapa di antaranya bahkan dapat dianggap bermanfaat:

  • enter_ca_mode / smcup / ti menonaktifkan bufferbackback (dan itu bagus, itulah yang selalu kami harapkan)

  • exit_ca_mode / rmcup / te mengembalikan buffer scrollback (tetapi juga mengembalikan konten layar yang ada sebelumnya) (yang berbeda dari hasil akhir program sebelumnya) (di mana layar yang diberikan terakhir tidak tersentuh)

... yang sesuai dengan tput smcupdan tput rmcupperintah.


1 xkcd Wajib.

muru
sumber
Menariknya BSD top (misalnya pada MacOS) juga menghapus terminal
Digital Trauma
15

Perilaku yang Anda cari dari kurang dibangun ke alternatif yang disebut htop. Anda dapat menginstalnya dengan:

sudo apt-get install htop

Secara khusus, itu beralih ke mode layar alternatif sebelum mulai mempertahankan konten layar asli Anda ketika Anda menutup htop. Ini juga memiliki berbagai perangkat tambahan lain di atas procps. Setelah diinstal, Anda bisa menjalankannya sebagai pengguna biasa:

htop
penguin359
sumber
Plus htopsangat berwarna-warni, menambahkan dukungan mouse, dll.
WinEunuuchs2Unix
4

Anda bisa menggunakan watch:

watch top -b

Ini default untuk memperbarui setiap dua detik, gunakan misalnya -n1untuk satu detik jika Anda ingin mengubah perilaku ini. Untuk keluar watch, tekan Ctrl+ Csebagai ganti dari yang biasa Q.

Pendekatan lain adalah membuka jendela terminal baru, misalnya dengan xterm:

xterm -e top

Berperilaku ini persis seperti topbiasanya, jendela menutup ketika Anda berhenti topdengan Qdan tentu saja tidak meninggalkan output dalam terminal Anda mulai dari. Tambahkan &ke akhir perintah ini untuk memulainya di latar belakang dan segera lepaskan terminal lagi.

pencuci mulut
sumber
1

Saat jawaban Rinzwind menunjukkan, clearperintah menghapus topoutput dari layar.

Setelah keluar, topAnda juga dapat menggunakan Ctrl+ Luntuk menghapus topoutput dari layar. Namun setelah salah satu perintah, Anda masih dapat menggulir ke atas layar untuk melihat topoutput yang lama .

Untuk benar-benar menghapus layar, sehingga topoutput tidak dapat digulir kembali ke, gunakan resetperintah:

top && reset

Pilihan lain untuk memberikan "tampilan segar" dari sesi baru adalah dengan menjalankan "ASCII splash screen" (jika Anda memilikinya). Dalam kasus saya, saya akan menjalankan:

top && reset && now && screenfetch

atur ulang sekarang splash.png

  • nowSkrip saya memanggil cuaca, kalender ( cal) dan toiletdengan waktu mewah.
  • screenfetch mengecat logo Ubuntu dan statistik mesin.
WinEunuuchs2Unix
sumber
1
Saya tidak akan merekomendasikan menjalankan kembali .bashrc secara teratur tanpa perlu karena biasanya ada baris seperti export PATH=...:$PATHdalam file itu dan menjalankannya berkali-kali akan memperpanjang PATH. Juga, menyebut neofetchdalam .bashrctidak perilaku standar (meskipun terlihat mewah). Misalnya, ketika saya menjalankan kembali, .bashrctidak ada yang terlihat terjadi.
PerlDuck
CTRL + L dan clearberperilaku tidak sama: coba for i in {1..200}; do echo "line $i"; donedi dua jendela baru yang berbeda. Kemudian tekan CTRL+Ldi window1 dan ketik clearwindow2. Sekarang gulir kembali di kedua jendela (roda mouse). Di CTRL+Ljendela-Anda dapat melihat semua baris (tergantung pada buffer gulir Anda) sementara di clearjendela-Anda hanya dapat menggulir kembali satu layar. Yaitu: clearmenghapus buffer scrollback sementara CTRL+Lmirip dengan $ window_height kali dengan menekan ENTER(alias baris baru).
PerlDuck
1
@PerlDuck neofetchadalah tangkapan yang bagus tapi saya pikir itu adalah turunan screenfetch. Saya menggunakannya untuk mengingatkan diri saya di Ubuntu karena saya memiliki dual boot dan Windows Bash memiliki layar splash yang berbeda. Saya akan mengambil .bashrcreferensi. Adapun cleardan Ctrl+ Lpoin saya adalah mereka serupa karena mereka berdua meninggalkan topoutput di gulir kembali buffer.
WinEunuuchs2Unix
2
Saya pikir semua orang memiliki hal yang berbeda di dalamnya .bashrc. Coba curl wttr.in/Edmonton?0, ini luar biasa. Gunakan curl wttr.in/:helpuntuk mendapatkan bantuan. Saya memiliki panggilan serupa di /etc/update-motd.d/skriplet jadi saya mendapat informasi saat masuk dari konsol atau ssh (tidak untuk setiap jendela terminal). Jika Anda suka, tambahkan --silent --max-time 3ke panggilan curl sehingga tidak akan selamanya jika internet lambat.
PerlDuck
@PerlDuck Ini Mengagumkan curl wttr.in/Edmonton?0! Terima kasih banyak. Saya akan mencoba toilet
memerasnya