我需要将命令行保持在屏幕顶部,并在其下方查看任何命令的输出。如何使用任何平台上的任何可用工具来实现这一点?
目前,在我使用过的所有终端仿真器上运行,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
Linux,Bash。
Bash 使用 stderr(文件描述符2
)来打印其命令提示符和命令行。使用tmux
来显示两个上下叠放的 shell(或者只是将两个 GUI 窗口、终端仿真器一个叠在另一个上面)。在下层 shell 中调用tty
。从现在开始不要直接使用下层 shell。在上层 shell 中将文件描述符重定向1
到下层 shell 的 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
有些 shell(例如zsh
)为命令行使用单独的文件描述符10
。这允许您将 stderr 重定向到下层(或另一个,第三个)tty,而将命令行保留在上层。
答案2
和原帖一样,我也一直在寻找让提示符保持在顶部的方法,@kamil-maciorowski 的回答让我大开眼界。经过一番尝试,我找到了以下命令序列,我相信它实现了原帖想要的效果。
tmux
tmux split-window -v
tmux selectp -t 1
tty > /tmp/bottom_tty
tmux selectp -t 0
tmux resize-pane -U 50
exec 1>`cat /tmp/bottom_tty`
- 调用 tmux
- 将终端拆分为两个垂直堆叠的窗格
- 将焦点设置在底部窗格上
- 将底部窗格的终端路径存储在临时文件中
- 将焦点设置在顶部窗格上
- 将顶部窗格的大小调整为一行(通过将其大小向上调整过多)
- 将顶部窗格的输出重定向到底部窗格