11

Я часто перенаправляю вывод программы на меньшее, например

produce_output | less

Это прекрасно работает до тех пор, пока produce_output не выдаст большое количество выходных данных. Если я ищу какой-то текст, который находится глубоко в файле, меньше отчетов

Calculating line numbers... (interrupt to abort)

Если я прерываю работу с Control+C, это также убивает produce_output , что останавливает его от дальнейшего вывода. Есть ли способ отправить прерывание меньшему количеству, так, чтобы produce_output продолжал работать?

Я знаю, что могу использовать kill -INT less_process , но думаю, что должно быть лучшее решение.

4 ответа4

13

Обычно все процессы в конвейере выполняются в одной и той же группе процессов, в результате чего все они получают сигнал. Вы можете использовать setsid foo | less запускать foo в другом pgrp.

9

Вы можете отключить номера строк с помощью

   -n or --line-numbers

вариант.

produce_output | less -n
0

Работая с большими объемами вывода, я нашел очень полезным отправить вывод в файл и использовать tail -f или less +F для просмотра, например:

produce_output > out 2>&1 & less +F out

Синтаксис 2>&1 гарантирует, что как stdout, так и stderr выходят out --- удалите это, если вы только хотите, чтобы stdout шел в файл. Таким образом, вы можете проверять вывод различными способами (даже с другой машины) без необходимости связываться с программой, производящей вывод.

Обратите внимание, что 2>&1 могут зависеть от bash (я не уверен). Убедитесь, что у вас достаточно места на диске для выходного файла :-)

0

Вы также можете просто сделать это:

less +F -f <(produce_output)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .