下推式端子输出


16

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

~/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终端程序的输出部分定义了什么?


这会让我感到困惑,但我赞扬您的努力。在linux / unix / opensource上,主要的教训是“一个大小不能全部适应”。
布鲁斯·埃迪格

我认为这是根本不可能的,除非您更改外壳程序的源代码(例如bash)。
雷南

5
您不仅需要破解Shell,还需要破解更多。由于端子是机电式的,因此一直在以这种方式滚动。至少,我要说的是,您需要破解一个终端仿真器,也许还需要一个Shell。
Alexios 2012年

这实际上是反直观的。您是否注意到ENTER键箭头?它指向下面的线,而不是上面的线。
dresende'4

有没有办法从终端抓取输出的项目,我的想法是创建某种包装程序,以抓取这些输出项目中的每一个,将它们中的每一个都像发布推文一样对待,将最新的总是出现在顶部,将输入提示粘贴在包装器用户界面的顶部。
rudolph9 2012年

Answers:


6

在bash中,它将在顶部显示当前提示/命令,在下面显示其输出,但不滚动或显示先前的命令:

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1'

此功能会将先前的命令放在下面,但是您必须分别将每个命令传递给它。不幸的是,exec > >(f)由于它会重定向整个bash,而不是单个命令,因此对此无能为力。功能如下:

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

然后运行每个命令,例如:

command args |f

它保存输出,创建多个等于length + 1的空行,然后将其放回去。您可以在最后标记行,如果愿意,可以显示假提示或水平线。例如

printf '%*s' $COLUMNS | tr ' ' _;

作为完整功能的替代品,但可以自动替换,我们可以在较早的$ PROMPT_COMMAND的末尾添加一个命令,该命令清除了一些任意的11行:

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1; tput il 11'

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


$PROMPT_COMMANDhttps://github.com/swirepe/alwaysontop获得


6

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

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

更糟糕的是,您的终端仿真器得到的只是一个字符串“在此位置放置此字符”类型的命令。在命令提示符和由它运行的命令输出之间没有区别,因此您不能对这两个部分都做一件事-至少,如果没有外壳程序的配合,您就不能做这件事。

外壳程序和程序假定屏幕向上进行-新数据位于底部,并一直向下进行。

至少从理论上讲,您可以修改终端仿真器,以便它以相反的顺序显示行-首先显示“底部”行,依此类推,直到屏幕底部的“顶部”行。

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

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


我做。 (-:
JdeBP

6

尽管这不会完全反向输出,但会将您的提示放在顶部:

https://github.com/swirepe/alwaysontop

要使用它,请运行:

git clone https://github.com/swirepe/alwaysontop.git
cd alwaysontop/
source alwaysontop.sh

如果您决定喜欢它,只需在.bash_profile中将其来源,例如:

echo "source ~/alwaysontop/alwaysontop.sh" >> ~/.bash_profile

1
这有点漏洞(例如带有制表符自动完成功能和历史记录),但是它很好地演示了如果正确实施该UI可能会带来的感觉。我认为这很有价值-帮助人们知道他们是否想要!
scipilot
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.