Почему GNU `less` просто отображает вывод моего сценария заголовка вместо содержимого файла?

425
Ben Richards

Я использую csh в качестве терминала и у меня есть скрипт, который запускается, когда я меняю каталоги, который заменяет заголовок окна на текущий каталог. У меня он изначально запускается в моем файле .cshrc, так что он изменит заголовок окна в новой оболочке.

Когда я использую lessдля просмотра текстового файла в консоли вместо содержимого файла, я увижу вывод этого скрипта. Это фактически делает lessбесполезным.

1

2 ответа на вопрос

1
Ben Richards

Согласно этому FAQ для Less на домашней странице разработчика, оказывается, что наличие в .cshrcфайле всего, что генерирует вывод на консоль (что делает мой скрипт заголовка окна), может мешать выводу less. По-видимому, lessвызывает оболочку для открытия и просмотра файлов, и поскольку любой новый экземпляр оболочки будет автоматически выполнять команды .cshrc, независимо от того, какой вывод консоли произойдет на этом шаге, будет мешать работе инструмента.

Решение состоит в том, чтобы удалить вызов моего скрипта из .cshrcфайла. Я могу поместить его в .loginфайл, но есть предостережение, что любой новый вызов оболочки не будет повторно выполнять команды в этом файле.

1
Kevin Panko

Ваша проблема вызвана тем, что ~/.cshrcфайл выводит на консоль вещи, которые мешают работе less.

Одним из способов решения этой проблемы является проверка наличия интерактивных оболочек, прежде чем делать что-либо, что влияет на консоль или изменяет способ выполнения сценариев оболочки (например, задание псевдонимов для cd).

if ($?prompt) then # Do things that affect interactive shells here endif