为什么Windows和Ubuntu具有相似的Shell命令?


14

Ubuntu有一个bash(Bourne Again SHell),而Windows有它的专有shell。根据我的研究,在Windows / Ubuntu中没有用于外壳脚本编写的语言的名称。这就是所谓的外壳脚本。

为什么Windows和Ubuntu的炮弹理解,如相同的命令:lsmkdirrmdirmount等?

是否有某种通用的Shell脚本语言?如果是这样,请给我更多详细信息。


9
请参阅en.wikipedia.org/wiki/List_of_Unix_commands-查找这些命令何时首次出现,并检查Windows和GNU何时首次出现。这些命令不是bash的一部分-它们是外部实用程序,因此使用哪个shell是无关紧要的。
muru

10
而且我很确定lsPowershell支持该功能,而不是cmd.exe。这是因为Powershell的创建者付出了一些努力来为常见的Unix命令添加别名,以使Unix用户更加自在。technet.microsoft.com/zh-CN/library/dd347739.aspx
muru,

7
DOS上的Wikipedia文章可能对此有所启发。Quote:“ DOS而是在Intel 8086 16位处理器上运行。从MS-DOS 1.28和PC DOS 2.0开始,该操作系统结合了Xenix(Microsoft的Unix变体)的各种功能。” 因此,在某种程度上,Unix是MS-DOS的先驱。 en.wikipedia.org/wiki/DOS
theodorn

4
@muru:其实,这两种了Unix DOS的命令实际上只是别名到真正的PowerShell命令,这是根据标准化命名的Action-Object结构,一组也被标准化动作和对象构成的。例如,lsdir都是它们的别名Get-ChildItem(还具有别名gci),mkdir并且md实际上New-Item(由于PowerShell的基于对象的方法,实际上可以创建的不仅仅是目录),等等。
约尔格W¯¯米塔格

2
还要查看CPM,VMS,JCL。
Zan Lynx

Answers:


44

Windows cmd.exe不支持lsmount等等,除非您自己安装这些并将其添加到%PATH%(通过Cygwin,MinGW,基于Unix的应用程序子系统(SUA)或其他方式)。Powershell可以。这是因为Powershell将这些作为标准Powershell命令的别名,因此Unix用户可以更加自在。请参阅Powershell中的兼容性别名列表。Windows确实具有rmdirmkdir等等。但是,这些当然不支持与Ubuntu相同的选项语法。

在Ubuntu中,这些与Bash无关。它们都是外部命令。这些实用程序有一些标准。POSIX是最著名的(请参阅POSIX要求的实用程序列表),而Linux Standard Base(LSB)是另一个对Linux系统很重要的(主要基于POSIX,但有一些补充)。Ubuntu上的功能主要由GNU提供,并且GNU实用程序通常具有比POSIX所需的基础更多的功能。

POSIX还定义您提到的shell语言与中的语言大不相同cmd.exe)。它是从Bourne shell的语法派生的。同样来自GNU的Bash(现在您知道Bourne再次指的是什么)也在顶部添加了功能,但是在需要时可以以POSIX兼容的方式运行。期望使用POSIX语言shbashkshashdashzsh所有使用语言,增强功能。csh处于一个自己的(噩梦)世界中,并在不断tcsh增强csh

要了解更多信息,请查看Unix和类似Unix的系统的历史。Unix比Windows早十多年,这些实用程序首次出现在Unix中。

Windows曾经兼容POSIX,因为美国政府要求政府机构使用OS(当时,它们添加了Unix服务(SFU),第一段提到了SUA)。但是该要求被取消,随后SUA被放弃。

有关:

(请注意,这些文章的共同部分-它们都在Unix&Linux上,并且带有标记的历史记录 -您可能会发现通过该标记进行浏览非常有用。)


3
AFAIK rmdir(与mkdir和一起使用cd / chdir)是command.com自MS-DOS 2.0以来的本机内置程序(以前DOS文件系统中没有层次结构)
jlliagre

1
rd也是捷径md
jlliagre

1
这是我从阅读您的答案并浏览其他人提供的链接后得到的结果:过去,这些命令/实用程序首先出现在各种不同的系统上。随着时间的推移,它们中的大多数已集成到Ubuntu中,其中一些已集成到Windows中。但是Windows决定以自己的方式进行操作,并创建自己的这些实用程序版本。随着时间的流逝,Windows决定将别名添加到自己的Shell命令中,以便linux用户可以使用表面上看起来与系统上相同但在其下转换为Windows命令的命令
Shady Programmer

1
期望使用POSIX语言shbashkshashdashzsh所有使用语言,增强功能。csh处于一个自己的(噩梦)世界中,并在不断tcsh增强csh。Windows曾经一次服从POSIX,因为美国政府要求它用于政府机构使用的OS(这正是SUA的来源)。但是该要求被取消,随后SUA被放弃。
大师

1
@ShadyProgrammer您会发现另一个有趣的U&L帖子:unix.stackexchange.com/q/145522/70524
muru

0

简单:

Linux是Dennis Ritchie和Ken Thompson发明的基于UNIX模型的系统。

Windows / DOS是廉价的CP / M系统的仿制品,该系统在1970年代在您插入电视的那些旧计算机上很流行,而该系统又是60年代末70年代初的UNIX系统的廉价仿制品。 。


尽管您的答案有些道理,但过于简单化以至于无用。(并且我们使用带有CP / M的显示器或终端-而不是电视;))当我试图找出一些晦涩的bash或sed命令时,有时我会回想起OS几乎无法为您做任何事情的时代,但是很容易做到-而且我从来没有在64k的机器上用完内存。
2016年
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.