Linux, Bash.
Bash использует stderr (дескриптор файла 2
) для печати своей командной строки и командной строки. Используйте tmux
для отображения двух оболочек друг над другом (или просто поместите два окна с графическим интерфейсом, эмуляторы терминала одно над другим). В нижнем из них призываем tty
. Не используйте нижнюю оболочку напрямую. В верхней части перенаправьте файловый дескриптор 1
на tty нижнего (например, exec 1>/dev/pts/2
).
Ctrl+L очищает верхний, clear
очищает нижний. Каждая часть многострочная. Благодаря функциям tmux
вы можете изменять их размер (т.е. перемещать границу вверх и вниз).
Используйте это, чтобы команды появлялись также в нижней части экрана:
trap 'printf "%s\n" "-----$ $BASH_COMMAND"' DEBUG
Я протестировал решение, и в какой-то момент мое окно терминала выглядело так:
kamil@foo:~$ ls -l /proc/$$/fd
kamil@foo:~$ uname -r
kamil@foo:~$ cat /etc/issue
kamil@foo:~$ █
──────────────────────────────────────────────────────────────────────
-----$ ls --color=auto -l /proc/$$/fd
total 0
lrwx------ 1 kamil kamil 64 Sep 9 20:42 0 -> /dev/pts/3
l-wx------ 1 kamil kamil 64 Sep 9 20:42 1 -> /dev/pts/2
lrwx------ 1 kamil kamil 64 Sep 9 20:42 2 -> /dev/pts/3
lrwx------ 1 kamil kamil 64 Sep 9 21:13 255 -> /dev/pts/3
-----$ uname -r
4.15.0-33-generic
-----$ cat /etc/issue
Ubuntu 18.04.1 LTS \n \l
(Примечание: --color=auto
появился, потому что мой ls
- псевдоним).
Ожидайте, что интерактивные инструменты (такие как текстовые редакторы) будут плохо себя вести, поэтому лучше отменить изменения во время их вызова. Пример:
1>&2 nano
Некоторые оболочки (например, zsh
) используют отдельный дескриптор файла 10
для командной строки. Это позволяет вам перенаправить stderr в нижний (или еще один, третий) tty, оставив командную строку в верхнем.