Và đừng nói " $TERM
" - luôn luôn như vậy xterm
.
Làm thế nào một bash
kịch bản có thể cho biết thiết bị đầu cuối nào đang chạy, cụ thể là iTerm, Terminal.app hay thực sự là một xterm?
Tôi hỏi vì reset
không hoạt động - hết hộp trên Terminal.app và iTerm2. Tuy nhiên, iTerm2 không nhận ra một chuỗi thoát để thực hiện thiết lập lại thiết bị đầu cuối ( \x1b]50;ClearScrollback\x07
) và nếu tôi có thể phát hiện ra nó, tôi có thể ghi đè reset
bằng một bí danh thực hiện đúng. AFAICT, Terminal.app thiếu trình tự thiết lập lại và mọi người dùng đến biện pháp tấn công lố bịch để hack xung quanh đó .
Mục tiêu cuối cùng của tôi ở đây là reset
làm việc giống nhau cho dù tôi đang làm việc trên OS X hay Linux, làm việc cục bộ hoặc từ xa thông qua SSH. (Tôi không muốn phải cố gắng nhớ đó, và nó rất hữu ích để làm reset && command-that-outputs-a-bunch
và có up-nhập làm việc.) Terminal.app và iTerm đang ném một chìa khoá trong kế hoạch này bằng cách không thực hiện reset
một cách chính xác.
Điều này có nghĩa là chỉ đơn giản là ghi đè reset
không hoàn toàn: nếu tôi đang sử dụng máy Linux, cần biết tôi đang sử dụng gnome-terminal
hay iTerm để gửi chuỗi thoát đúng.
Có cách nào (ngay cả khi tôi cần ioctl
) để hỏi thiết bị đầu cuối thực sự là gì không?
Đối với mục đích của câu hỏi này, thiết lập lại sẽ xóa màn hình, đặt lại con trỏ và xóa bộ đệm cuộn lại.
reset
, vì đó là những gì ngón tay của tôi biết.
reset
lệnh xóa nội dung cuộn lại của trình mô phỏng đầu cuối, nhưng điều đó không được đảm bảo để làm điều đó, bởi vì cuộn ngược là một tính năng dành riêng cho trình giả lập thiết bị đầu cuối, không thực sự là một một phần của một thiết bị đầu cuối. Tuy nhiên, Terminal hỗ trợ một phần mở rộng của chuỗi thoát ED (Erase in Display) để xóa cuộn lại ESC [ 3 J
. Bạn có thể xóa màn hình, sau đó sử dụng màn hình đó, ví dụ:reset && printf '\e[3J’
xterm
(thông qua TERM=xterm
) tôi sẽ hy vọng rằng bạn mô phỏng một superset của XTerm, nó sẽ xóa cuộn lại khi thiết lập lại. (Cũng giống như nếu bạn gửi các dãy thoát cho "màu xanh", bạn mong muốn xanh.) Cấp, xterm của tôi nói với tôi rằng Erase is backspace.
, mà tôi không có gì cảm ơn khác không; Điều đó thật khó chịu.
Terminal.app
cài đặt, tab thiết bị đầu cuối và đặt các dòng cuộn ngược về 0? Điều đó có vô hiệu hóa bất kỳ và tất cả văn bản trên dòng hiện tại, hoặc bất cứ thứ gì phía trên đầu màn hình không? Tôi biết, đó không chính xác là những gì bạn yêu cầu, đáng để thử.