Существует ли стандартный способ изменения порядка вывода терминального вывода, т. Е.
~/Developer $ command0
-bash: comman0: command not found
~/Developer $ command2
-bash: command2: command not found
~/Developer $ command3
-bash: command3: command not found
~/Developer $
будет отображаться как:
~/Developer $
-bash: command3: command not found
~/Developer $ command3
-bash: command2: command not found
~/Developer $ command2
-bash: comman0: command not found
~/Developer $ comman0
Я чувствую, что всегда, когда ваша подсказка внизу противоречит интуиции, более эффективным способом представления выходных данных является обратный порядок вывода. Как я мог бы осуществить это? В частности, где определена выходная часть программы терминала OSX?
bash
).Ответы:
В bash это будет отображать текущую подсказку / команду вверху, а ее вывод ниже, но без прокрутки или предыдущих команд:
Эта функция помещает предыдущие команды ниже, но вы должны передавать каждую команду индивидуально. К сожалению,
exec > >(f)
с этим ничего не поделаешь, так как он перенаправляет всю команду bash, а не отдельные команды. Вот функция:Затем выполните каждую команду как:
Он сохраняет выходные данные, создает количество пустых строк, равных длине + 1, а затем помещает выходные данные обратно. Вы можете пометить строку в конце, которая будет отображать поддельное приглашение или горизонтальное правило, если хотите. Например
В качестве дерьма, но автоматической альтернативы всей этой функции, мы можем добавить команду в конец нашего более раннего $ PROMPT_COMMAND, которая очищает несколько произвольных 11 строк:
Вы также можете использовать,
tput -S
чтобы избежать нескольких двоичных вызовов.Я получил
$PROMPT_COMMAND
с https://github.com/swirepe/alwaysontop .источник
К сожалению, это будет довольно сложно. Протокол между приложениями и терминалом OS-X является вариантом протокола управления терминалом VT100 / ANSI , в частности протокола XTerm .
Это включает в себя множество предположений о положении экрана и т. Д., Которые было бы сложно переназначить в мир, где дисплей был перевернут.
Хуже того, все, что получает ваш эмулятор терминала, это строка команд типа «поставить этот символ в эту позицию». Не делается различий между командной строкой и выводом запускаемой ею команды, поэтому вы не можете сделать что-то одно для обеих частей - по крайней мере, без взаимодействия с оболочкой внизу.
Оболочка и программы предполагают, что экран движется вверх - новые данные внизу и продолжают вниз.
Вы можете, по крайней мере теоретически, изменить свой эмулятор терминала так, чтобы он отображал строки в обратном порядке - сначала «нижняя» строка и т. Д. Вплоть до «верхней» строки в нижней части экрана.
Однако это изменило бы порядок строк в выводе команды, поэтому остальная часть содержимого также выскочила бы назад. Если вы хотите, чтобы команды (например, ls, cat) выполнялись «вниз», но подсказывали «вверх», жизнь сложнее.
Я не знаю никакого программного обеспечения, которое реализует это. (... но посмотрите комментарий JdeBD к этому для ссылки на один.) :)
источник
Хотя это не будет полностью перевернуть вывод, оно сохранит ваше приглашение вверху:
https://github.com/swirepe/alwaysontop
Чтобы использовать это, запустите:
Если вы решили, что вам это нравится, просто поставьте его в свой .bash_profile что-то вроде:
источник