首页 科技

探索 Window 命令行演变史 —— 起源

时间:2018-07-23 01:51:30 栏目:科技
探索 Window 命令行演变史 —— 起源

脚本之家

你与百万开发者在一起

探索 Window 命令行演变史 —— 起源

探索 Window 命令行演变史 —— 起源

 ☝☝☝

另一个抢沙发赢..入口

探索 Window 命令行演变史 —— 起源

协作翻译

原文:Windows Command-Line: Backgrounder

链接

https://blogs.msdn.microsoft.com/commandline/2018/06/20/windows-command-line-backgrounder/

译者:Tocy, kevinlinkai, 无若, 郭凯凯啊, 云逸于海


这是我们探索所有命令行的系列帖子中的第一篇 - 从命令行的起源和终端的演变,到我们在未来 Windows 发行版中对 Windows 控制台和命令行进行全面更新的做法。


无论你是经验丰富的老手,还是刚接触计算机(欢迎所有人),我们希望你能发现这些帖子的兴趣点、丰富的内容和有趣之处。 所以,拿一杯咖啡,然后通过命令行的起源进行旋风之旅!


很久很久以前,在一个机房...


早期的电子计算,人们需要一个有效的方式进行人机交互,并且能看到他们的命令和结果。


第一个真正意义上的有效的人机交互是电传打字机。电传打字机是电动机器让用户用键盘输入,而他的输出设备在早期期就是打印机,屏幕是对用户来说是近期的显示输出设备。


操作者键入的字符缓存到本地并且通过电传打字机发送到附近的小型机或者大型机,一系列的信号沿着线缆(比如RS-232线缆)以每秒10个字符的速度(100波特率/秒)。


探索 Window 命令行演变史 —— 起源

打字传报机型号 33ASR


注意:令人兴奋的是David Gesswein 的 PDP-8 site有许多关于ASR33的信息(还有PDP-8和其他相关的技术),包括图片,视频等。


运行在电脑上的程序接受到键入的字符,然后再才能决定他们做什么,也许是随机的,异步的把字符发挥给打字传报机。打字传报机将会打印或者显示这些字符以供操作者读取和反应。


在接下来的几年里,科技的发展加速了传输的速度到19200波特每秒,并且用电子射线(CRT)管显示器替代了嘈杂的,还要花很大代价操作的打字机。这联系到八九十年代的终端,包括随处可见的DEC VT100 终端。


探索 Window 命令行演变史 —— 起源

DEC VT100 终端


随着科技的发展,现在的终端发送字符给运行在电脑上的程序,电脑会以文本的形式输出给用户,作为一项基本的功能保留到今天,在所有的命令行和所以..的终端上。


探索 Window 命令行演变史 —— 起源

终端和命令行体系


事实上,部分高雅的现代设备的系统的每一个组件依然有最简单的和最原始的:从键盘释放字符缓存成电子信号去连接电脑。输出设备把字符写入连接电脑的显示器上面(例如:纸张,屏幕)。


并且因为系统的每一个阶段和下一个阶段交流通过最简单的字符流,这是一种相对简单的方式去介绍通信基础。比如,调制解调器会讯息输入输出流凭借电话线发送到很远。


文本编码


重要的要记住的是终端和计算机是通过字符串进行通信的:当按下终端键盘上的键时,表示键入字符的值将被发送到已连接的计算机。按“A”键,发送值为65(0x40)。按“Z”键,发送值为90(0x5a)。


7位ASCII文本编码


字符列表及其值在美国信息交换标准码(ASCII)标准(ISO/IEC 646 / ECMA-6)的“7位编码字符集”中定义


探索 Window 命令行演变史 —— 起源标准ASCII 7位字符


当 7 位不够用时——Code-Pages(代码页)


然而,7 位并不能提供足够的空间来编码诸多变音符号、标点符号以及其他语言和区域中所使用的符号。因此,通过添加一个附加位,ASCII 字符表可以使用定义了字符值为 128-255 的其他“代码页”集作扩展(并且可以重定义其他几个不可打印的 ASCII 字符)。

例如,IBM 定义了代码页 437 ,它添加了几个块字符,如╫(215)和╣(185),以及包括π(227)和±(241)的符号,并在通常不可打印的字符值范围 1-31 中重新定义了可打印字符:


探索 Window 命令行演变史 —— 起源

Code-Page 437


Latin-1 代码页定义了拉丁语言使用的许多字符和符号:


探索 Window 命令行演变史 —— 起源

Latin-1 Code-Page


许多命令行环境和 shell 支持用户更改代码页,这会导致终端显示不同的字符(取决于可用的字体),尤其是对于值为 128-255 的字符更为明显。但请注意错误的代码页可能导致显示的文本看起来像“乱码”。而且,是的,“mojibake”(乱码)是一个真实的术语!谁知道呢?


当 8 位不够用时 - Unicode


虽然代码页在一段时间内提供了解决方案,但它们有许多缺点,包括它们不允许同时显示多个代码页/语言的文本。因此,需要一种新的编码方法,以便准确表示人类已知的每种语言的每个字符和脚本,并留有足够的空间!


进入,Unicode 。

Unicode 是一个国际标准(ISO/IEC 10646),它(目前)定义了 137,439 个字符,涵盖146个现代和历史脚本,以及许多符号和字形,包括在几乎所有应用程序、..和设备中广泛使用的许多表情符号。 Unicode 标准定期更新,添加了额外的编写系统,添加/修正表情符号等。

Unicode 还定义了“不可打印”的格式化字符,例如,允许字符拼接和/或影响前面或后面的字符!这在像..语等脚本语言中特别有用,其中给定字符的连字由它所包围的字符决定!表情符号也使用“零宽度连接符”将几个字符组合成一个视觉字形;例如,微软的 Ninja Cat 表情符号是通过将猫表情符号与其他表情符号结合起来形成忍者猫表情符号而形成的:


探索 Window 命令行演变史 —— 起源

Microsoft's Ninja Cat Emoji


当多字节太多了 – UTF-8!


表示由 Unicode 定义的所有符号所需的空间,尤其是复杂字符、表情符号等,可能非常大,并且可能需要几个字节来唯一且系统地定义每个可显示的字符。


因此,几种编码方法被开发出来,用于这种所需存储空间与编码/解码数据所需的时间/复杂度:UTF-32(4字节/字符),UTF-16/UCS-2(2字节/字符)和 UTF-8(1-4字节/字符)是最流行的 Unicode 编码。

在很大程度上要归功于 UTF-8 与 ASCII 码的向后兼容性机器存储效率,它已经成为互联网上最流行的 Unicode 编码,并且自2008年后其超越 ASCII 和其他流行编码以来,UTF-8 已被广泛采用了:


探索 Window 命令行演变史 —— 起源

UTF-8 编码流行度增长趋势(来源: Wikipedia)


因此,虽然大多数终端最开始支持 7 位和 8 位 ANSI 文本,但大多数现代终端支持 Unicode/UTF-8 文本。


那么,什么是命令行? 什么是Shell?


“命令行”或CLI(命令行接口/解释器)描述了人类操作计算机的最基本的机制:CLI接受操作员键入的输入并执行所请求的命令。


例如,echo Hello将文本“Hello”写入到输出设备(例如屏幕)。 dir(Cmd)或ls(PowerShell / *NIX)会列出当前目录的内容。等等。

在早期的计算机上,操作员可用的命令通常相对简单,但操作员很快就要求越来越高的复杂度,并且能够编写脚本来自动执行常规或重复或复杂的任务。因此,命令行处理器的复杂度不断提高,并演变成现在通常被称为命令行“shell”的处理机制。

在UNIX/Linux中,原始的UNIX shell(sh)启发了大量的shell,包括Korn shell(ksh)、C shell(csh)和Bourne Shell(sh),它们本身引发了Bourne Again Shell(bash)等。

在微软的世界里:



我们将会重新阐释Windows命令行shell,但现在我们知道有各种shell,并且它们接受用户/操作员键入的命令,并根据需要执行各种任务。


现代的命令行


现代的计算机比过去的“简易终端”强大得多,并且通常运行于带有图形用户界面(GUI)桌面操作系统(例如Windows、Linux、macOS)。这些GUI环境允许多个应用程序同时运行在用户屏幕上各自的“窗口”内,它们可以显示在桌面或者隐藏在后台。


探索 Window 命令行演变史 —— 起源

        在WSL上运行的Cmd、PowerShell和Ubuntu Linux独立控制台实例


沉重、笨重的电动机械电传打字机已被在屏幕窗口内运行的现代终端应用程序所取代,但其基本功能仍与过去的终端设备相同。


类似地,终端应用程序连接到的命令行应用程序工作方式也与过去的终端设备工作方式相同:它们接收输入字符,决定如何处理这些字符,(可选地)执行工作,并可以发出要显示给用户的文本。但是,与通过慢速的TTY串行通信线路通信相比,终端应用程序和命令行应用程序在同一台机器上使用非常高速的、内存中的伪电传打字设备( Pseudo Teletype,PTY)通信系统进行通信。


探索 Window 命令行演变史 —— 起源

现代命令行


当然,虽然现代终端主要与本地运行的命令行应用程序通信,但它们也可以与在同一网络中其他机器上运行的命令行应用程序通信,甚至可以通过internet与在世界另一端运行的远程机器通信。这种命令行的“远程操作”体验是一个强大的工具,它在每个..上都很流行,尤其是*NIX..。


那么,我们在哪里?


在这篇文章中,我们对命令行的最重要方面进行了历史考察,这些方面对于 * NIX 和 Windows 都是通用的:终端、SHELL、文本和文本编码。


重要的是要记住上面的信息,我们将继续下一篇文章,我们将了解有关 Windows 控制台的更多信息,它是什么,它是如何工作的,它与 *  NIX终端有何不同,它有哪些挑战,以及我们正在通过哪些努力来解决这些挑战,并将 Windows 控制台带入21世纪!


敬请关注!

精彩回顾  点击链接即可  

 头条:学以致用!挂科5门入侵数据库改成绩被处分;PyCharm2018.2 RC发布;首例“王者荣耀”外挂案宣判 两人获刑

  探索 Window 命令行演变史 —— 起源探索 Window 命令行演变史 —— 起源探索 Window 命令行演变史 —— 起源脚本之家粉丝..,请查看!

 你家里如果有一个程序员,请一定心疼他! 

 代码我只服雷布斯!分享雷军22年前写的代码

 探索 Window 命令行演变史 —— 起源 资源 | 各类编程视频学习资源都在这里哈!赶快收藏吧~

 雷军:十年编程路,我想给程序员几点建议!

 程序员都在看的这 9 篇python学习文章!

 周鸿祎谈程序员创业,条条都是中肯建议

 99%的程序员都会收藏的书单,你读过几本?

探索 Window 命令行演变史 —— 起源

长按下方图片

识别..  关注脚本之家

探索 Window 命令行演变史 —— 起源

  版权声明:转载文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益与我们联系删除或授权事宜。

相关文章