Может ли меньше следовать (нажатием F) ввод по каналу (аналогично файлу)? Для файла, в который выполняется запись, команда
less <file>
будет следовать за файлом при нажатии F.
Но если у меня есть команда, которая выводит каналы напрямую в меньшее, как это
command | less
нажатие F ничего не сделает.
Таким образом, похоже, что трубы не могут следовать как файлы? Или, может быть, это связано с командой, также пишущей в STDERR? Эффект, которого я пытаюсь добиться, всегда видеть последний результат команды: как удерживать нажатой PageDown!
Связанное замечание справедливо и для G (перейти к концу): при прямом переходе к меньшему количеству это не сработает.
Ответы:
Нажатие Fили Gзаставляет
less
попытаться достичь ввода EOF. Если вход представляет собой трубу,less
зависает до тех пор , пока труба не будет закрыта с другой стороны (и не "ничего не делает").Это можно обойти, сохранив вывод команды во временном файле в фоновом режиме, а затем используя его в качестве входных данных для
less
:Там нет возможности сделать это
less
только; Тем не менее, я признаю, что это было бы полезно.источник
less
зависает, пока труба не будет закрыта с другой стороны . Это своего рода вводящее в заблуждение утверждение. Что происходит, что меньше вызововread
в режиме блокировки, ожидая новые данные или или закрытие трубы.less
блокирующее чтение не только выполняется, но и выполняется в цикле, ожидая EOF. И EOF на трубе происходит, только если ее другая сторона закрыта.less
бы обновить экран в этом цикле, не было бы проблемы. Блокировка чтения имеет мало общего с этой проблемой.less
не сможет обновить экран, если нет данных; когда появятся некоторые данные, блокировка чтения вернет их иless
сможет обновить экран без отдельного потокаДа, начиная с версии 474. Однако это не упоминается в примечаниях к выпуску ни одной версии, поскольку в настоящее время существует еще одна проблема с этой функцией. Ниже приводится комментарий от сопровождающего менее - Марк Нудельман:
Что касается команды F на каналах, это также исправлено в less-474. Вместо поиска EOF, команда F ищет конец буферизованного ввода и начинает читать там. Однако это не очень удобно, потому что когда вы нажимаете CTRL-C, чтобы остановить команду F, это убивает процесс, производящий вывод. Я не уверен, как это исправить.
Пока эта проблема не устранена за меньшее время, можно обойти ее, используя функции оболочки. См. Мой ответ на вопрос: есть ли способ выйти из режима «меньше», не останавливая другие процессы в конвейере? вопрос для деталей.
Для справки: проблема, связанная с тем, что F не работает с трубами, имеет номер 300 в списке известных ошибок и называется « Команда F не работает с вводом по конвейеру».
Работает начиная с версии 466. Ссылаясь на заметки о выпуске для этой версии:
источник
Из менее справочной страницы
так что это должно работать, и это на самом деле работает для меня.
источник