Làm thế nào để tôi thoát khỏi đầu mà không để lại đầu ra trên thiết bị đầu cuối?


30

Làm cách nào topđể thoát khỏi tương tự như cách lessthoát, nghĩa là không để lại kết quả đầu ra trên màn hình?

Đây là phiên bản tôi có:

procps-ng version 3.3.9

Làm thế nào về việc sử dụng một thay thế, như thế htopnào?
DarkHeart

Câu trả lời:


48

Khi bạn bắt đầu nó như thế này ...

top && clear

... màn hình sẽ xóa sau khi thoát khỏi đỉnh với q.

Điều này hoạt động giống như less:

tput smcup ; top ; tput rmcup

( smcupchuyển sang màn hình phụ nơi toplệnh được thực thi và khi bạn thoát top rmcupsẽ chuyển trở lại màn hình bình thường)


Bạn có thể bí danh lệnh hàng đầu để làm điều đó ( Làm cách nào để tạo bí danh Bash vĩnh viễn? )


3
cleardường như cũng xóa tất cả ngoại trừ màn hình cuối cùng của bộ đệm cuộn (vì vậy chỉ cần rời khỏi màn hình cuối cùng trong trường hợp này) - ít nhất là trong xfce4-terminal và QTerminal. Câu tputtrả lời hoạt động rất tốt, đặc biệt là trong một bí danh chotop
Xen2050

2
Đừng quên Ctl + L để khắc phục nhanh.
jpaugh

Oh! thật thú vị; Tôi đã tự hỏi tại sao lessđầu ra cuối cùng hoàn toàn biến mất khỏi bộ đệm.
Cuộc đua nhẹ nhàng với Monica

Một số gợi ý khác: 1. sử dụng tính năng vượt trội nhưng không tích hợp htopvà 2. bí danh các lệnh với nhau để bạn không phải tự xâu chuỗi chúng mỗi lần.
với

@flith Tôi sẽ không đánh cắp câu trả lời của người dùng khác ;-)
Rinzwind

31

Trớ trêu thay 1 , đây là một thời gian ngắn hành vi của top. Trong 3.3.8, topđã xóa màn hình, nhưng không phải trong các phiên bản trước hoặc kể từ đó. Xem lỗi Red Hat # 977561 :

Việc xóa màn hình là kết quả gián tiếp của những thay đổi trong thao tác đầu cuối do Jim Warner (tác giả của công cụ 'đỉnh') giới thiệu nhằm ngăn chặn công cụ 'đỉnh' với tín hiệu SIGWINCH được tạo bởi một số ứng dụng đầu cuối được sử dụng rộng rãi. Chính tôi là người đã báo cáo vấn đề lũ lụt và anh ấy đã cố gắng hết sức để giải quyết nó và đưa ra một bản sửa lỗi cho vấn đề này dưới dạng 8 cam kết riêng biệt. Cam kết giới thiệu việc xóa màn hình có hàm băm sau: 'depaf6e1a81738ff08ee8e8523871e12f555ad6d'.

Do báo cáo lỗi, Jim sau đó sửa nó thành một lần nữa không xóa đầu ra trong 3.3.9 .

topkhông có tùy chọn hoặc cài đặt cấu hình để kiểm soát điều này, AFAICT, đây hoàn toàn là hành vi được mã hóa cứng. Bạn có thể muốn gửi yêu cầu tính năng tại https://gitlab.com/procps-ng/procps/issues/ .

Cho đến lúc đó, bạn có thể clearthủ công như Rinzwind đã đề xuất hoặc sử dụng tputnhư gợi ý thép.


Thật thú vị, các cam kết được đề cập ở trên cũng có một lời giải thích hay về lệnh Steel thép được đề xuất, bởi vì trên thực tế nó giống như những gì ban đầu được thực hiện trong mã:

Bộ đệm cuộn được sử dụng trong một số trình giả lập thiết bị đầu cuối có thể là một bất tiện thực sự cho người dùng sau một số thao tác thay đổi kích thước. Các tổ hợp phím bổ sung thường sẽ được yêu cầu để hiển thị chính xác màn hình trên cùng.

Sau nhiều lần điều tra, chúng tôi đã khai quật được hai chuỗi terminfo có tác dụng vô hiệu hóa / khôi phục bộ đệm cuộn ngược. Chúng được ẩn rất tốt dưới tiêu đề của chuỗi 'để bắt đầu / kết thúc chương trình bằng cốc'. Đổi lại, 'cup' xử lý khả năng đánh địa chỉ con trỏ của tty.

Chúng tôi không quan tâm những gì bạn gọi cho họ hoặc những gì họ đề cập miễn là họ hoàn thành công việc. Và những điều này thực sự làm! Tuy nhiên, hãy lưu ý rằng có một số tác dụng phụ, một số trong đó thậm chí có thể được coi là có lợi:

  • enter_ca_mode / smcup / ti vô hiệu hóa bộ đệm cuộn lại (và điều đó thật tốt, đó là điều chúng tôi luôn hy vọng)

  • exit_ca_mode / rmcup / te khôi phục bộ đệm cuộn lại (nhưng cũng khôi phục lại nội dung trên màn hình trước đó) (khác với kết quả cuối chương trình trước đó) (trong đó màn hình hiển thị cuối cùng không được chạm tới)

... tương ứng với các lệnh tput smcuptput rmcup.


1 xkcd bắt buộc.


Điều thú vị là BSD top (ví dụ trên MacOS) cũng xóa thiết bị đầu cuối
Digital Trauma

15

Hành vi bạn đang tìm kiếm từ ít hơn được xây dựng thành một thay thế được gọi là htop. Bạn có thể cài đặt nó với:

sudo apt-get install htop

Cụ thể, nó chuyển sang chế độ màn hình thay thế trước khi bắt đầu bảo quản nội dung màn hình gốc của bạn khi bạn đóng htop. Nó cũng có một loạt các cải tiến khác trên đầu trang của Procps. Sau khi được cài đặt, bạn có thể chạy nó như một người dùng thông thường:

htop

Plus htoprất sặc sỡ, thêm hỗ trợ chuột, v.v.
WinEunuuchs2Unix 11/11/18

4

Bạn có thể sử dụng watch:

watch top -b

Nó mặc định cập nhật hai giây -n1một lần , sử dụng ví dụ trong một giây nếu bạn muốn thay đổi hành vi này. Để thoát watch, nhấn Ctrl+ Cthay vì thông thường Q.

Một cách tiếp cận khác là mở một cửa sổ terminal mới, ví dụ xterm:

xterm -e top

Cư xử này giống hệt như topthường thực hiện các đóng cửa sổ khi bạn thoát khỏi topvới Qvà dĩ nhiên là nó để lại không có đầu ra tại nhà ga bạn bắt đầu nó từ. Thêm &vào cuối lệnh này để khởi động nó trong nền và ngay lập tức giải phóng thiết bị đầu cuối một lần nữa.


1

Khi câu trả lời của Rinzwind chỉ ra, clearlệnh sẽ xóa topđầu ra khỏi màn hình.

Sau khi thoát, topbạn cũng có thể sử dụng Ctrl+ Lđể xóa topđầu ra khỏi màn hình. Sau một trong hai lệnh, bạn vẫn có thể cuộn màn hình lên để xem topđầu ra cũ .

Để thực sự xóa màn hình, sao cho topđầu ra không thể cuộn trở lại, hãy sử dụng resetlệnh:

top && reset

Một tùy chọn khác để cung cấp "giao diện mới" cho phiên hoàn toàn mới là chạy "màn hình giật gân ASCII" (nếu bạn có). Trong trường hợp của tôi, tôi sẽ chạy:

top && reset && now && screenfetch

thiết lập lại Splash.png

  • nowKịch bản của tôi gọi thời tiết, lịch ( cal) và toiletvới thời gian ưa thích.
  • screenfetch vẽ logo Ubuntu và số liệu thống kê máy.

1
Tôi không khuyên bạn nên chạy lại .bashrc thường xuyên mà không cần vì thường có những dòng như export PATH=...:$PATHtrong tệp đó và chạy nó nhiều lần sẽ không cần thiết mở rộng PATH. Ngoài ra, gọi neofetchvào .bashrckhông phải là hành vi tiêu chuẩn (mặc dù nó trông lạ mắt). Ví dụ, khi tôi chạy lại, .bashrckhông có gì rõ ràng xảy ra.
PerlDuck

CTRL + L và clearhoạt động không giống nhau: thử for i in {1..200}; do echo "line $i"; donetrong hai cửa sổ mới, khác nhau. Sau đó nhấn CTRL+Lvào window1 và gõ clearvào window2. Bây giờ cuộn lại trong cả hai cửa sổ (bánh xe chuột). Trong phần CTRL+L-owow, bạn có thể thấy tất cả các dòng (tùy thuộc vào bộ đệm cuộn của bạn) trong khi ở phần dưới, clearbạn chỉ có thể cuộn lại một màn hình. Đó là: clearxóa bộ đệm cuộn trong khi CTRL+Ltương tự như nhấn $ window_height lần nhấn ENTER(còn gọi là dòng mới).
PerlDuck

1
@PerlDuck neofetchlà một sản phẩm tốt nhưng tôi đoán nó được gọi là phái sinh screenfetch. Tôi sử dụng nó để nhắc nhở bản thân mình trong Ubuntu vì tôi có khởi động kép và Windows Bash có màn hình giật gân khác. Tôi sẽ đưa ra .bashrctham khảo. Đối với clearCtrl+ Lquan điểm của tôi là chúng giống nhau ở chỗ cả hai đều để topđầu ra trong bộ đệm cuộn lại.
WinEunuuchs2Unix

2
Tôi nghĩ mọi người đều có những thứ khác nhau .bashrc. Hãy thử curl wttr.in/Edmonton?0, nó thật tuyệt vời. Sử dụng curl wttr.in/:helpđể được giúp đỡ. Tôi có một cuộc gọi tương tự trong /etc/update-motd.d/scriptlet vì vậy tôi được thông báo khi đăng nhập từ console hoặc ssh (không phải cho mọi cửa sổ terminal). Nếu bạn thích điều đó, hãy thêm --silent --max-time 3vào cuộc gọi curl để nó sẽ không mất mãi nếu internet chậm.
PerlDuck

@PerlDuck curl wttr.in/Edmonton?0TUYỆT VỜI! Cảm ơn bạn rất nhiều. Tôi sẽ cố gắng vắt nó sau toiletmàn hình hiển thị trên màn hình giật gân của mình :)
WinEunuuchs2Unix 11/11/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.