Итак, если вы catфайл, это будет обратный порядок?
хаос
Нет, но я бы хотел, чтобы порции выходных данных были сдвинуты вниз
Том Прайс
1
bashне может сделать это, потому bashчто даже не знает о позициях экрана: он просто записывает в выходной файл. Вам понадобится эмулятор терминала, который знает об bashинтерактивной подсказке, чтобы знать, когда переустанавливать курсор и когда прокручивать окно.
Чепнер
Спасибо @chepner, я снова рассматриваю эту проблему, и ваш комментарий заставил меня взглянуть за пределы bash и начать смотреть на весь стек дисплея. Я хочу остаться в текстовых виртуальных консолях (то есть без X Windows), поэтому я бы пока избегал эмуляторов терминалов, но для моих сеансов с графическим интерфейсом я непременно это выясню. В случае, если кто-нибудь сталкивается с этим вопросом, я думаю, что это связано с tty, и я в настоящее время ищу здесь вдохновение ... linusakesson.net/programming/tty
Том Прайс
Ответы:
7
Добавьте эти строки в ваш .bashrc:
prompt_on_top() {
tput cup 0 0
tput el
tput el1
}
pre_cmd() {
if [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] || [ -n "$COMP_LINE" ]; then
return
fi
printf "\33[2J"
}
PROMPT_COMMAND="prompt_on_top"
trap 'pre_cmd' DEBUG
bashиметь PROMPT_COMMAND , который удерживает команду, будет выполнена перед bashприглашением показа. Здесь мы устанавливаем его в функцию prompt_on_top, которая использует tput для установки курсора в верхней части экрана.
bashтакже есть способ выполнить команду перед выполнением любой команды, используя trap для обработки сигнала DEBUG. Здесь мы устанавливаем его в функцию pre_cmd, которая будет очищать старый экран и ничего не делать, если мы сделали завершение ( COMP_LINE не пусто) или запустили команду BASH_PROMPT.
У этого подхода есть ограничение: если вывод команды слишком длинный и не помещается на экране, вывод будет переопределен prompt_on_topдействием. В этом случае вам нужно передать вывод на пейджер, чтобы прочитать весь вывод.
Спасибо за ваш хорошо объясненный ответ, мне есть о чем почитать и узнать. Я проверил ваш скрипт, и в настоящее время он эффективно стирает старый вывод с экрана между командами. Я хотел бы сохранить предыдущие выходные данные на экране, под приглашением, и иметь их так, чтобы новые выводы вставлялись между приглашением и старым выводом, таким образом выталкивая старый вывод вниз на экран.
Том Прайс
Для тех, кто приходит сюда через веб-поиск, этот код github.com/swirepe/alwaysontop также «держит приглашение bash в верхней части экрана», а также несколько других функций. Тем не менее, он не отвечает на исходный вопрос: более старые выходные команды удаляются, как и в коде cuonglm.
WillC
Другим недостатком этого решения является то, что у вас нет отзывов о том, какая команда была выполнена в последний раз. То есть cat fileбудет показывать fileконтент, но вы не получите немедленной обратной связи о точном выполнении команды. В идеале за подсказкой следует невыполненная + расширенная версия выполненной команды, за которой следует вывод std.
cat
файл, это будет обратный порядок?bash
не может сделать это, потомуbash
что даже не знает о позициях экрана: он просто записывает в выходной файл. Вам понадобится эмулятор терминала, который знает обbash
интерактивной подсказке, чтобы знать, когда переустанавливать курсор и когда прокручивать окно.Ответы:
Добавьте эти строки в ваш
.bashrc
:bash
иметь PROMPT_COMMAND , который удерживает команду, будет выполнена передbash
приглашением показа. Здесь мы устанавливаем его в функциюprompt_on_top
, которая использует tput для установки курсора в верхней части экрана.bash
также есть способ выполнить команду перед выполнением любой команды, используя trap для обработки сигналаDEBUG
. Здесь мы устанавливаем его в функциюpre_cmd
, которая будет очищать старый экран и ничего не делать, если мы сделали завершение ( COMP_LINE не пусто) или запустили командуBASH_PROMPT
.У этого подхода есть ограничение: если вывод команды слишком длинный и не помещается на экране, вывод будет переопределен
prompt_on_top
действием. В этом случае вам нужно передать вывод на пейджер, чтобы прочитать весь вывод.источник
cat file
будет показыватьfile
контент, но вы не получите немедленной обратной связи о точном выполнении команды. В идеале за подсказкой следует невыполненная + расширенная версия выполненной команды, за которой следует вывод std.