Это не имеет ничего общего с Bash. Стирается текст, отображаемый вашим эмулятором терминала.
Как и другие полноэкранные программы, less
сохраняет состояние терминала (включая отображаемый текст и положение курсора) при его запуске и восстанавливает его при выходе.
Это выполняется путем печати строк, определенных записями smcup
и rmcup
terminfo .
Они зависят от значения переменной среды $TERM
.
Если эти строки не напечатаны , или если они настроены на что-то, что не сохраняет и не восстанавливает состояние вашего терминала, тогда less
заменит все содержимое вашего экрана содержимым файла, который вы хотите просмотреть, а затем не восстанавливать его.
Использование опции -X
для less
(в соответствии с предложением принятого вами ответа говорит less
not для печати строк smcup
и rmcup
- - который я ожидал бы вызвать проблему, которую вы пытаетесь решить.
Если вы хотите сохранить и восстановить состояние вашего терминала (что означает, что вывод, полученный с помощью less
, исчезнет, когда вы выйдете), вам нужно убедиться, что переменная окружения $TERM
установлена на что-то с правильным smcup
и rmcup
настроек. Я считаю, что установка xterm
обычно работает.
Если вы амбициозны, вы можете создать свою собственную запись terminfo и использовать команду tic
, чтобы «скомпилировать» ее в двоичный формат, используемый системой.
Ответ Давида Ференци предлагает другую возможную причину проблемы; это не то, с чем я когда-либо сталкивался.
(Мнения сильно отличаются от того, является ли сохранение и восстановление состояния терминала хорошей вещью. Эта запись в блоге была написана кем-то, кто сильно ее не любит. Лично мне это нравится; если я хочу запустить полноэкранную команду и держите ее вывод видимым, пока я занимаюсь чем-то другим, я просто запускаю ее в другом окне.)
(Оригинального плаката не было на сайте около 2,5 лет, поэтому мы не должны ожидать каких-либо отзывов, но эти ответы, вероятно, будут полезны для других.)