И не говори " $TERM" - это всегда xterm.
Как bashскрипт может сказать, в каком терминале он работает, в частности, это iTerm, Terminal.app или на самом деле xterm?
Я спрашиваю, потому resetчто не работает из коробки на Terminal.app и iTerm2. iTerm2, однако, распознает escape-последовательность для выполнения перезагрузки терминала ( \x1b]50;ClearScrollback\x07), и если бы я мог ее обнаружить, я мог бы переопределить resetпсевдоним, который делает правильные вещи. На самом деле, Terminal.app не хватает последовательности сброса, и люди прибегают к нелепым хакерским действиям, чтобы взломать это .
Моя конечная цель здесь - resetработать одинаково, работаю ли я на OS X или Linux, работаю локально или удаленно через SSH. (Я не хочу пытаться вспомнить, какие именно, и это полезно делать reset && command-that-outputs-a-bunchи начинать работу.) Terminal.app и iTerm вносят рывок в этот план из-за resetнеправильной реализации .
Это означает, что просто переопределение resetне совсем так: если я на машине с Linux, он должен знать, использую ли я gnome-terminalили iTerm, чтобы отправить правильную escape-последовательность.
Есть ли способ (даже если мне нужно ioctl) спросить терминал, что это на самом деле ?
¹ Для целей этого вопроса сброс должен очистить экран, сбросить курсор и стереть буфер прокрутки.
reset, так как это то, что знают мои пальцы.
resetкоманда очистит содержимое прокрутки в эмуляторе терминала, но это не гарантировано, потому что прокрутка назад является специфичной для эмулятора терминала функцией, а не часть терминала. Тем не менее, терминал поддерживает расширение escape-последовательности ED (Erase in Display) для удаления прокрутки назад ESC [ 3 J. Вы можете очистить экран, а затем использовать это, например,reset && printf '\e[3J’
xterm(сквозным TERM=xterm), я бы ожидал, что вы эмулируете расширенный набор XTerm, который очищает его прокрутку при перезагрузке. (Точно так же, как если бы вы послали escape-последовательность для «blue», вы бы ожидали синего цвета.) Конечно, мой xterm говорит мне об этом Erase is backspace., что, я благодарен, больше ничего не делает; это просто раздражает.
Terminal.appнастройки, вкладку терминала и установите для строк прокрутки значение 0? Отключает ли это какой-либо текст над текущей строкой или что-нибудь над верхней частью экрана? Я знаю, это не совсем то, что вы просили, стоит попробовать.