Câu trả lời:
Nếu giả lập hỗ trợ thiết bị đầu cuối của bạn, bạn có thể làm điều này bằng cách sử dụng cơ chế tương tự được sử dụng bởi less
, vim
, et al, cụ thể là ti
và te
termcap khả năng ( smcup
và rmcup
trong terminfo hiện đại hơn). Các chuyển đổi này từ màn hình chính sang màn hình phụ và trở lại màn hình chính tương ứng.
Nếu hệ thống của bạn có tput
lệnh, bạn có thể sử dụng:
tput smcup # switch to secondary screen
...
tput rmcup # switch back to primary screen
Mặt khác, cho xterm
và có lẽ đối với hầu hết các trình giả lập thiết bị đầu cuối khác, điều này:
printf '\e[7\e[?47h'
nên chuyển sang màn hình phụ và điều này:
printf '\e[2J\e[?47l\e8'
nên quay trở lại chính (và đặt con trỏ trở lại vị trí cũ).
tcsh có một echotc
lệnh tích hợp, vì vậy bạn có thể làm:
tcsh -c 'echotc ti'
...
tcsh -c 'echotc te'
(hoặc chỉ sử dụng echotc
trực tiếp nếu bạn đang sử dụng tcsh).
tput
, hãy thử hiện đại 1049
thay vì 47
. Điều này đã được Xterm giới thiệu và được hỗ trợ bởi một số trình giả lập thiết bị đầu cuối khác. Nó xóa màn hình thay thế khi chuyển sang màn hình và để nguyên nội dung khi chuyển trở lại (để bạn có thể xem / sao chép nội dung sau khi chương trình toàn màn hình đã thoát).
trap 'tput rmcup' EXIT
.
Đây được gọi là “thay thế màn hình” (và như t o p hits google hiển thị, bạn là bất thường trong thích tính năng này). Một số thiết bị đầu cuối hỗ trợ hai bộ đệm màn hình, một được sử dụng bởi các ứng dụng toàn màn hình, cái còn lại được sử dụng bởi các ứng dụng hướng dòng. Bash không biết gì về họ. Nếu một lệnh chỉ đơn giản là phát ra đầu ra đến thiết bị đầu cuối, bạn có thể sử dụng các chuỗi điều khiển đầu cuối để chuyển sang màn hình phụ và quay lại (các lệnh này được ghi trong xterm ctlseqs ).
printf '\e[?47h'; mycommand; printf '\e[?47l'
Lưu ý rằng không có cuộn ngược lại cho màn hình thay thế, vì vậy bạn sẽ chỉ nhìn thấy màn hình đầu ra cuối cùng. Nếu đó là một vấn đề, chỉ cần làm điều đơn giản:
mycommand | less
Chỉ có hai bộ đệm màn hình. Nếu bạn muốn nhiều hơn, hãy sử dụng bộ ghép kênh màn hình thích hợp như Screen hoặc Tmux .
Không có câu trả lời hiện tại nào có vẻ hoạt động trên máy của tôi, nhưng tôi phát hiện ra lệnh có tên screen
, có vẻ như là mánh khóe cho tôi.
xterm
có một tùy chọn để (en | dis) có thể kiểm soát các chuỗi đó; những người khác có thể làm như là tốt.
tput smcup
vàtput rmcup
dường như để làm công việc.