如何从头开始构建基本终端

jon*_*nie 7 java linux macos operating-system

我已经在线查看了包括stackoverflow在内的一些建议或指示,但我找到的任何东西都是压倒性的,我不确定从哪里开始.如果我忽略了一些显而易见的事情,请道歉.

我想了解终端是如何工作的,我想从头开始构建一个终端,我希望能够提供有关终端所需概念和功能的材料的任何建议或建议,但我不仅仅想要链接到源代码.我发现了很多开源项目,但我发现它们势不可挡.

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

我真正想要的是阅读材料/教程的起点,给我一些指导.如果这意味着退回到比终端更基本的东西,我很高兴做到这一点,一旦我有一些实际的程序,将使我继续朝着主要目标前进

Zag*_*rax 1

终端背后的想法是一个无限循环,它解释并执行每个命令。下面是一个 Perl 语言的例子:

use strict;
use warnings;

while(<>) {
    system($_);
}

exit 0;
Run Code Online (Sandbox Code Playgroud)

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

<>从标准输入读取。

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

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

所以,这就是基本的想法。我认为每种语言都实现了一个具有相同功能的命令system(名称可能会改变,但也可能是相同的)。您可以查看man system以了解该命令在C. 我不懂Java,但我很确定你必须搜索类似的东西。从这个出发点,我想你可以开始构建自己的终端了。

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