4

Мне нужно держать командную строку в верхней части экрана и видеть вывод любой команды под ней. Как я могу добиться этого, используя любые доступные инструменты на любой платформе?

В настоящее время на всех эмуляторах терминала, с которыми я работал, если вы запустите ls foo -l результат будет:

$ ls foo -l
hi.txt
bye.txt
$ command prompt is here

Хотелось бы увидеть это:

$ command prompt is here
$ ls foo -l
hi.txt
bye.txt

1 ответ1

0

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, оставив командную строку в верхнем.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .