我正在寻找 Ubuntu 桌面版(或 Windows)上的一个终端,它可以将输入和输出拆分到不同的窗口中。就像一个分割窗口一样,我在左侧输入所有命令,结果将显示在右侧的窗口中。
我已经搜索这个很长时间了,但到目前为止我还没有找到任何可以做到这一点的东西。
有什么好的建议吗?
答案1
我不用任何特殊软件就成功制作出了此输出。我做了以下操作 -
打开了 2 个窗口。(左边的窗口用于输入,右边的窗口用于输出)
在右侧窗口中,我使用以下命令创建了一个命名管道(我使用 /dev/shm,因为那是共享内存,但我也可以轻松地将它放在其他地方,并且输出文件名是任意的)。
mkfifo /dev/shm/test.fifo
在第二个窗口中,我发出了读取管道的命令 -
tail -f /dev/shm/test.fifo
在左侧,我输入了以下内容来创建一个 bash shell,其内容被发送到 FIFO 文件,该文件由 fifo 读取。这会将 stdout 推送到 fifo。这似乎将命令提示符留在了左侧窗口中
bash > /dev/shm/test.fifo
或者,输出 stdout 和 stderr(这将删除左侧窗口中的命令提示符)
bash > /dev/shm/test.fifo 2>&1
您可以键入 exit 来关闭 bash shell,停止捕获输出,并键入 rm /dev/shm/test.fifo 来删除命名管道。
答案2
我不知道双窗格终端窗口,但我可以告诉你如何将输出发送到另一个打开的终端窗口。打开两个终端窗口,在第二个终端窗口中使用该tty
命令。结果将类似于/dev/pts/1
。
返回第一个窗口,输入命令并将输出发送到第二个窗口。例如,$ls > /dev/pts/1
结果将显示在第二个窗口中。
答案3
我很想看一个模型(也许是一张纸上的铅笔画),看看你想象中它是什么样子。
输入和输出如何配对?如果输出很长,左侧会显示什么?如何不导致宝贵的屏幕空间的巨大浪费?(或者会?)
当您运行交互式应用程序(例如文本编辑器)时它会是什么样子?
您究竟如何看待“输入”与“输出”?例如,根据您的想法,shell 提示符是“输入”还是“输出”?如果您按Ctrl+R并且 shell 显示(reverse-i-search)
,它属于哪里?这些是字符串输出在您的 shell 中,所以严格地说,您说您希望它们在右列中。但如果它们显示在那里,那么编辑命令行就很愚蠢了,所以我宁愿希望您喜欢在输入窗格……
没有这样的终端的原因可能部分是上述原因(例如弄清楚如何有效地利用空间),但主要是因为输入和输出和你想象的完全不一样。
实际上,一切终端显示的是输出其他组件(有时是应用程序,有时是内核)的键盘输入(我假设你指的是“输入”)是绝不(*)由终端直接显示。
((((*) 严格地用括号括起来,只是为了技术上的正确性:一些终端实现了一种模式,即输入立即由终端显示,但在实践中,这种模式几乎从未使用过。这是我们几十年前留下的遗产。忘记我在这里说过的话吧。)))
根据终端仿真器中运行的应用程序以及该应用程序所处的上下文(例如,您正在输入命令行),如果您按下某个字母,假设您按下字母x
,响应可能是也可能不是出现字母x
。但这绝不是因为终端决定绘制按下的字母。这是因为终端将该字母转发给内核,内核可能会自行响应,也可能将其转发给应用程序,应用程序可能会响应,并且该响应可能是(但不一定)打印字母x
,然后导致终端绘制字母x
。
你想象的输入和输出终端的输入并不是它所拥有的。输入是它转发但不显示的按键。终端显示的所有内容都是内核或应用程序的输出(吹毛求疵:这是终端的输入,不是来自用户而是来自应用程序,但这就是我们通常所说的“输出”,即从内核或应用程序的角度来看待这个故事)。
我猜想您希望将命令行(提示符和您正在编辑的命令)与命令的输出分成两个窗格。终端仿真器无法自动进行这种区分,它不知道收到的数据是由 shell(命令行处理程序)还是由应用程序发送的;事实上,终端仿真器根本不知道 shell 是什么。它看到的只是一条指令流。提示符,然后如果您输入“ls”,然后是字母“l”和“s”,然后如果您按 Enter,然后是文件列表,所有这些都到达同一个流中,终端会平等对待它们,因为这是它必须做的,而且即使它想这样做,它也不知道如何将它们分成多种类型的数据。
您想要的需要某种拆分。要么是此流中的转义序列,告诉终端将数据打印到哪一侧,要么是两个单独的 tty 行,然后支持 shell 将提示符和命令行打印到一个 tty 行中,并将应用程序的输出连接到另一个 tty 行 - 结合一个终端应用程序,该应用程序显示两个相邻的终端,并以连接到这两个终端的方式启动该特殊 shell。
我确信你希望拥有的功能并不存在。原因包括它不是一个常见的功能,它需要多个关键组件之间的协作(因此一个人不太可能快速实现它并获得一定的知名度),它可能会导致大量未使用的屏幕区域,并且整个终端输入和输出的概念(我认为你从根本上误解了)不是以可以轻松支持此功能的方式构建的。
我最好的建议是习惯现有终端和 shell 的工作方式。您可以随意尝试找到您喜欢的 shell 及其自定义,使提示符和命令行尽可能突出或融入上下文(例如使用颜色、粗体或斜体字体、特殊 Unicode 字符、可能的多行提示符等)。