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

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

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

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

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

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

Правда, использование «less» вместо «more» работает, хотя это и не дает желаемого эффекта, поскольку открывает отдельное «окно» и не позволяет прокручивать страницу назад после завершения (мне не нужна возможность прокручивать страницу назад так, как это позволяет «less»).

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

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

Спасибо!

решение1

Похоже, что использование teeперенаправления в файл и подкачки stdout будет более целесообразным, чем подкачка в середине конвейера:

printf "%s\n" this is a test | tee /tmp/some.file | more -3

Связанный контент