Стандартное разбиение на страницы с использованием 'more' и передача в системный журнал

Я реализовал скрипт-обертку, который заставляет все команды, выполняемые через этот скрипт-обертку, регистрировать (через rsyslog) такие вещи, как время выполнения, пользователь, который выполнил команду, и код выхода.

Я пытаюсь реализовать разбиение на страницы, и у меня возникла проблема с командой "more". Корень моей проблемы в том, что "more", кажется, завершается, когда оно передается в другую программу, например

echo -e "this\nis\na\ntest" | more -3 | cat

Это напечатает 4 строки, хотя, если мы обрежем '| cat 'в конце, затем он остановится после печати 3 строк, как и ожидалось.

Следует признать, что использование "меньше" вместо "больше" работает, хотя это не дает желаемого эффекта, так как открывает отдельное "окно" и не позволяет прокрутить назад после его завершения (мне не нужна возможность прокручивать назад так, как позволяет "меньше".

Мое текущее решение состоит в том, чтобы использовать команды "head" и "tail", чтобы получить желаемый эффект, но есть и другие проблемы, с которыми они сталкиваются.

Кто-нибудь знает секрет, как заставить "больше" работать так, как я себе представлял? Также приветствуются предложения по другому, более простому инструменту подкачки (поддерживает действия Enter, пробел и 'q').

Спасибо!

1 ответ

Кажется, что с помощью tee для перенаправления в файл и stdout подкачки было бы более подходящим, чем подкачка в середине конвейера:

printf "%s\n" this is a test | tee /tmp/some.file | more -3
Другие вопросы по тегам