Và đừng nói " $TERM" - luôn luôn như vậy xterm.
Làm thế nào một bashkị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ì resetkhô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 đè resetbằ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à resetlà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-bunchvà 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 resetmột cách chính xác.
Điều này có nghĩa là chỉ đơn giản là ghi đè resetkhô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-terminalhay 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.
resetlệ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.appcà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ử.