Dan jangan katakan " $TERM
" - itu selalu xterm
.
Bagaimana bash
skrip dapat mengetahui terminal apa yang sedang berjalan, khususnya apakah itu iTerm, Terminal.app, atau sebenarnya xterm?
Saya bertanya karena reset
tidak berfungsi di luar kotak pada Terminal.app dan iTerm2. Namun, iTerm2 mengenali urutan pelarian untuk melakukan reset terminal ( \x1b]50;ClearScrollback\x07
), dan jika saya bisa mendeteksinya, saya bisa menimpanya reset
dengan alias yang melakukan hal yang benar. AFAICT, Terminal.app tidak memiliki urutan reset, dan orang - orang menggunakan tom-hackery konyol untuk meretas itu .
Tujuan akhir saya di sini adalah untuk reset
bekerja sama apakah saya bekerja pada OS X atau Linux, bekerja secara lokal atau jarak jauh melalui SSH. (Saya tidak ingin harus mencoba mengingat yang mana, dan ini berguna untuk melakukan reset && command-that-outputs-a-bunch
dan memiliki pekerjaan yang masuk). Terminal.app dan iTerm melemparkan kunci pas dalam rencana ini dengan tidak menerapkan reset
dengan benar.
Ini berarti bahwa mengganti saja reset
tidak cukup: jika saya menggunakan mesin Linux, itu perlu tahu apakah saya menggunakan gnome-terminal
atau iTerm untuk mengirim urutan pelarian yang tepat.
Apakah ada cara (bahkan jika saya memerlukan ioctl
) untuk bertanya terminal apa itu sebenarnya ?
¹Untuk keperluan pertanyaan ini, reset harus menghapus layar, mengatur ulang kursor, dan menghapus buffer scrollback.
reset
, karena itulah yang jari saya tahu.
reset
perintah untuk menghapus konten gulir-kembali emulator terminal, tetapi itu tidak dijamin untuk melakukan itu, karena gulir-kembali adalah fitur khusus terminal emulator, bukan benar-benar sebuah bagian dari terminal. Namun, Terminal mendukung ekstensi dari urutan pelepasan ED (Erase in Display) untuk menghapus scroll-back ESC [ 3 J
. Anda dapat menghapus layar, lalu menggunakannya, misalnya,reset && printf '\e[3J’
xterm
(melalui TERM=xterm
) saya berharap Anda meniru superset dari XTerm, yang menghapus scrollback-nya saat reset. (Sama seperti jika Anda mengirim urutan pelarian untuk "biru", Anda akan mengharapkan biru.) Memang, xterm saya mengatakan kepada saya bahwa Erase is backspace.
, yang saya syukuri tidak ada yang lain; itu hanya menjengkelkan.
Terminal.app
pengaturan, tab terminal dan mengatur garis scrollback ke 0? Apakah itu menonaktifkan sebagian dan semua teks di atas baris saat ini, atau hanya apa pun di atas layar? Saya tahu, itu bukan apa yang Anda minta, layak dicoba.