如何从头开始构建基本终端 [关闭]

Posted

技术标签:

【中文标题】如何从头开始构建基本终端 [关闭]【英文标题】:How do I build a basic Terminal from scratch [closed] 【发布时间】:2013-03-02 18:42:22 【问题描述】:

我在网上查看了一些建议或指示,包括在 *** 上,但我发现的任何东西都令人不知所措,我不确定从哪里开始。如果我忽略了一些明显的事情,我深表歉意。

我想了解终端的工作原理,我想从头开始构建一个终端,我希望对涵盖终端所需概念和功能的材料提出任何建议或建议,但我不只是想要指向源的链接代码。我发现了很多开源项目,但我发现它们不堪重负。

理想情况下,我想构建自己的终端,可以在 OS X、Linux 和/或 Windows 上运行(我可能会使用 Java,但会考虑其他语言)并最终拥有一个 Web 界面(希望将我的控制台安装在我的浏览器)我知道这已经完成,但我想自己做,这样我就可以详细了解它是如何工作的,并且只是有一个项目要做。

我真正想要的是阅读材料/教程的起点,为我提供一些指导。如果这意味着退回到比终端更基本的东西,我很乐意这样做,一旦我有一些实际程序可以让我朝着主要目标前进

【问题讨论】:

这太宽泛了,所以并不是全面演练或建议的真正来源。我建议你看看现有终端的来源。 (java中至少有两个:JCTerm和Terminator) @millimoose 肯定有任何终端都需要的基本概念或功能吗?这就是我的困惑 查看虚拟 TTY 和 ansi 控制代码 【参考方案1】:

终端背后的想法是一个无限循环,它解释和执行每个命令。这是 Perl 中的一个示例:

use strict;
use warnings;

while(<>) 
    system($_);


exit 0;

我知道 Perl 不是最简单易读的语言(但它肯定是最快的编写语言),但这就是理解上述程序所需的全部内容:

&lt;&gt; 从标准输入读取。

system($_) 执行命令(其中$_ 是一个特殊的 Perl 变量,它在循环内工作并表示当前评估的项目,因此在我们的例子中,是给定的命令)。

您可以尝试运行上述程序,将其保存为foo.pl,打开终端并执行perl foo.pl

所以,这是基本思想。我认为每种语言都实现了一个命令system,它的作用相同(名称可能会改变,但也可能相同)。您可以查看man system 以了解此命令在C 中的工作原理。我不知道Java,但我很确定你必须搜索类似的东西。从这个起点,我想你可以开始搭建自己的终端了。

【讨论】:

这是一个外壳,不是终端。 @millimoose,是的,谢谢你指出不同之处。但是,如果我理解得很好,我可以把这个 shell 变成一个终端,在里面添加另一个调用这个的软件,不是吗? 您可以通过添加足够多的功能将任何东西变成任何东西。我的意思是,操作系统外壳是解释启动和管理其他进程的命令的东西。典型的 GUI 终端仿真器会在窗口中呈现 shell 的输出(文本和控制字符),并从 GUI 工具包中获取键盘事件并将它们转换为 shell 可以理解的东西(再次输入标准输入和控制字符。)它们是相关的软件,这就是为什么您可以将它们组合在一起,但它们执行完全不同的任务。 您所描述的并不是“将外壳变成终端”。它是“使用终端运行你的 shell”,意思是你对 OP 的问题“如何开发终端?”的回答。是“使用现有终端”【参考方案2】:

创建到目标计算机的套接字连接,[从它读取,如果有的话,显示],[等待用户输入,显示,将其发送到套接字],重复。你已经有了基本的终端。

【讨论】:

这个问题在 2013 年可能过于宽泛,但现在它有了更简单的答案。其中之一是 nodejs/npm ssh2+https+websocket+xtermjs,从后向前堆叠。如果你想让它变得更好,有很多调整,但是只要把每个部分都安装好,然后再安装下一个,你就可以很快地拥有一个工作的网络终端。请注意 ssh 的加密仅从 web 服务器到 ssh 服务器(本地或远程)。您的网络连接需要 https 和有效证书。您可以从 Lets Encrypt 免费获得一个。如果你也可以加密你的 websocket 数据,那就更好了。

以上是关于如何从头开始构建基本终端 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

构建 jQuery UI 插件 [关闭]

从头开始操作系统[关闭]

从头开始实施更快的 Rcnn [关闭]

学习了如何使用 HTML 和 CSS 从头开始​​制作响应式 HTML 电子邮件。下一步是啥? [关闭]

如何创建一个基本的 Java 服务器? [关闭]

PHP中的开源分析/统计软件? [关闭]