Подтвердить что ты не робот

Как автоматически перейти на меньшее, если результат больше, чем на моей оболочке?

В основном, я не буду использовать | less для каждой команды из оболочки.

Pipe to less используется только тогда, когда я фактически запускаю команду без нее и узнаю, что она не помещается на странице. Это обойдется мне в два прогона одной и той же команды оболочки.

Есть ли способ, чтобы каждый раз, когда результат команды больше, чем отображаемая страница, он автоматически получает меньше каналов?

4b9b3361

Ответ 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 'будет текущим каталогом и трубой, которые выводятся на меньшее.