Как автоматически перейти на меньшее, если результат больше, чем на моей оболочке?
В основном, я не буду использовать | less
для каждой команды из оболочки.
Pipe to less используется только тогда, когда я фактически запускаю команду без нее и узнаю, что она не помещается на странице. Это обойдется мне в два прогона одной и той же команды оболочки.
Есть ли способ, чтобы каждый раз, когда результат команды больше, чем отображаемая страница, он автоматически получает меньше каналов?
Ответы
Ответ 1
Самая важная проблема с попыткой сделать это - заставить ее отключиться при запуске программ, которым требуется tty.
Я бы порекомендовал, что для программ и утилит, которые вы часто используете, создайте функции оболочки, которые обертывают их и обрабатывают до less -F
. В некоторых случаях вы можете назвать функцию такой же, как и программа, и она будет иметь приоритет, но может быть переопределена.
Вот пример функции-обертки, которая потребует тестирования и, возможно, некоторого дополнительного кода для обработки крайних случаев и т.д.
#!/bin/bash
foo () {
if [[ -p /dev/stdout ]] # you don't want to pipe to less if you're piping to something else
then
command foo "[email protected]" | less -F
else
command foo "[email protected]"
fi
}
Если вы используете то же имя, что и в примере, оно может сломать вещи, которые ожидают другого поведения. Чтобы переопределить функцию для запуска базовой программы, перед ней следует command
:
command foo
будет запускать foo
без использования функции с тем же именем.
Ответ 2
Подключите его к less -F
aka --quit-if-one-screen
:
Причины не могут автоматически выйти, если весь файл может быть удален воспроизводится на первом экране.
Ответ 3
Вы всегда можете подключиться к less -E (это приведет к тому, что в конце файла будет автоматически отключено). Для команд с коротким выходом он будет делать то, что вы хотите. Я не думаю, что вы можете автоматически перейти на меньшее, когда есть много выходных данных.
Ответ 4
В общем случае для автоматического подключения к less
требуется, чтобы оболочка была предсказуемой относительно вывода, который будет производиться командами, которые он запускает, - и это достаточно сложно для людей, чтобы предсказать это, не пытаясь сделать программы.
Вы можете написать оболочку, которая сделает это за вас, - которая захватывает вывод (но как насчет stderr?) и при необходимости разбивает страницы, но это, безусловно, не будет стандартной оболочкой.
Ответ 5
Я написал эту функцию-оболочку и поместил ее в мой .profile. Вы можете использовать это перед командой, и она автоматически будет транслировать ее до менее, если она длиннее 1 страницы.
lcmd ()
{
echo "$("[email protected]")" | less -F;
};
Итак, lcmd ls 'будет текущим каталогом и трубой, которые выводятся на меньшее.