2016-01-19 2 views
0

Я использую консоли PuTTY и xterm bash для доступа к Ubuntu 12.04. У меня есть скрипт сборки, который вызывает cmake и передает STDERR в STDOUT. Когда возникает ошибка времени компиляции, консоль иногда заполняет страницы сообщений об ошибках. Меня интересуют только первые несколько сообщений, поэтому вам нужно прокручивать несколько раз, чтобы увидеть его. Как я могу поместить какой-то знак (например, код выхода ANSI) перед командой cmake и программно прокрутить буфер обратно к этой точке?Как прокручивать назад до заданной строки в буфере истории строки Uteruntu и PuTTY или отображать только один экранный текст?

Если это невозможно, то как я могу обрезать вывод до одного экрана текста, учитывая, что размер окна является переменным? Обычно я использую переменную окружения LINES, но она недоступна, как показано на рисунке set. man pg говорит о «системном числе строк», а pg все еще работает, так как я могу получить это значение?

ответ

0

$(stty size|cut -d' ' -f1) отвечает на вторую часть, но считает логические строки, а не линии экрана, поэтому не обрабатывает линии, которые обертываются.

1

Ни PuTTY, ни xterm не имеют возможности маркировать область прокрутки и заставлять терминал прокручивать назад с помощью этого в верхней части экрана. Как и многие функции, это было бы «выполнимо», но не попадало бы в обычное использование.

Существенная часть вопроса

как я могу отсечь выход ровно один заполненного экрана текста

Вы могли сделать это (как подразумевается) некоторый тип пейджера , pg слишком ограничен, чтобы рассмотреть. Некоторые текстовые редакторы могут быть сделаны для этого — с некоторыми работами. Оба vim и vile могут читать файл со стандартного ввода; оба имеют языки сценариев. Ни (насколько я знаю), не имеет заранее сделали скрипт для этого:

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

Если бы не было переноса строк, сценарий будет довольно просто, так как операции по H (вверху экрана), L (внизу экрана) и копирование текста в диапазоне от от линии к другой являются часть оригинала vi.

Линейная упаковка осложняет ситуацию. Возможно иметь линию, которая обертывается дольше, чем экран. Конечно, возможно иметь более короткую линию, которая обертывается мимо конца видимого экрана. Макрос можно было бы написать, чтобы найти конец экрана и сохранить эту сумму текста. Но для его упрощения нет встроенной функции (см., Например, All the right moves). Это «выполнимо».

+0

Спасибо, Томас. Я рассматривал «больше» или «меньше». Есть ли способ нажимать клавиши, чтобы отображать только первую страницу, чтобы пользователю не нужно было нажимать какие-либо клавиши? Я попробовал '(сделать 2> & 1) | больше <<< 'q'', но 'more' отображает« q »вместо первой страницы выхода« make », а затем завершает работу. – Gnubie

+0

В вашем примере кажется, что у вас есть 'more', пытающийся прочитать из двух разных stdin (и, согласно вашему комментарию, последний показан только). Вы * можете * использовать пейджер, если данные уже были в (временном) файле, но я не вижу этого в вашем вопросе. –