下推端子输出

rud*_*ph9 18 terminal

是否有一种标准方法可以反转终端输出的输出顺序,即:

~/Developer $ command0 
-bash: comman0: command not found 
~/Developer $ command2 
-bash: command2: command not found 
~/Developer $ command3 
-bash: command3: command not found 
~/Developer $ 
Run Code Online (Sandbox Code Playgroud)

将显示为:

~/Developer $ 
-bash: command3: command not found 
~/Developer $ command3 
-bash: command2: command not found 
~/Developer $ command2 
-bash: comman0: command not found 
~/Developer $ comman0
Run Code Online (Sandbox Code Playgroud)

我觉得总是让你的提示在底部是违反直觉的,一种更有效的呈现输出的方式是颠倒输出顺序。我该如何去实施这个?具体来说,OSX 终端程序的输出部分在哪里定义?

Dan*_*man 6

不幸的是,这将是相当困难的。应用程序和 OS-X 终端之间的协议是VT100/ANSI终端控制协议的变体,特别是XTerm协议。

这包括一系列关于屏幕位置等的假设,重新映射到显示反转的世界将是一项挑战。

更糟糕的是,你的终端模拟器得到的只是一串“把这个字符放在这个位置”类型的命令。命令提示符和由它运行的命令的输出之间没有区别,因此您不能对这两个部分做一件事 - 至少,如果没有下面的 shell 的合作。

外壳程序和程序假定屏幕向上进行 - 底部有新数据,并永远向下进行。

至少在理论上,您可以修改终端仿真器,使其以相反的顺序显示行 - 首先显示“底部”行,直到屏幕底部的“顶部”行。

但是,这会颠倒命令输出中的行顺序,因此其余内容也会向后弹出。如果您希望命令(例如:ls、cat)“向下”运行但提示“向上”移动,则生活会更难。

我不知道任何实现此功能的软件。(...但请参阅 JdeBD 对此的评论以获取链接。):)


Tom*_*oat 6

在 bash 中,这将在顶部显示当前提示/命令,在下面显示其输出,但没有滚动或以前的命令:

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1'
Run Code Online (Sandbox Code Playgroud)

这个函数将把以前的命令放在下面,但你必须单独将每个命令通过管道传递给它。不幸的是,exec > >(f)这无济于事,因为它重定向了整个 bash,而不是单个命令。这是函数:

f () { tee ~/.STDIN | wc -l | xargs expr 1 + | xargs tput il && cat ~/.STDIN; }
Run Code Online (Sandbox Code Playgroud)

然后运行每个命令,如:

command args |f
Run Code Online (Sandbox Code Playgroud)

它保存输出,创建一些等于 length+1 的空行,然后将输出放回原处。您可以在末尾标记一行,如果您愿意,该行将显示假提示或水平线。例如

printf '%*s' $COLUMNS | tr ' ' _;
Run Code Online (Sandbox Code Playgroud)

作为这整个函数的一个废话但自动的替代方案,我们可以在我们之前的 $PROMPT_COMMAND 末尾添加一个命令来清除有点随意的 11 行:

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1; tput il 11'
Run Code Online (Sandbox Code Playgroud)

您还可以使用tput -S避免多次二进制调用。


$PROMPT_COMMANDhttps://github.com/swirepe/alwaysontop得到了。


小智 6

虽然这不会完全反转输出,但它会使您的提示保持在顶部:

https://github.com/swirepe/alwaysontop

要使用它运行:

git clone https://github.com/swirepe/alwaysontop.git
cd alwaysontop/
source alwaysontop.sh
Run Code Online (Sandbox Code Playgroud)

如果您决定喜欢它,只需在您的 .bash_profile 中使用以下内容获取它:

echo "source ~/alwaysontop/alwaysontop.sh" >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)