在 Windows 上使用 Cmder 时 shell 到底是什么?

在 Windows 上使用 Cmder 时 shell 到底是什么?

我刚刚开始在 Windows 7 上使用 Cmder,我知道这是一个适用于 Windows 的控制台模拟器,它比使用 cmd 提供更好的体验。但是据我所知,模拟器需要运行 shell 才能将用户命令传达给操作系统,那么在 Windows 上,这里的 shell 是什么?CMD 是 Windows 的默认 shell 吗?

我很感激能够理解这些工具是如何连接起来的。

答案1

Windows 内置了两个命令行 shell:Cmd.exe 和 PowerShell 5。(Windows GUI 在某种意义上确实是一个“shell”,但它不是命令shell,不适用于该问题。)

Cmder 默认使用 Cmd.exe,但是沉重自定义它——您看到的实际交互提示不是正常的 Cmd.exe 提示;它是由clink注入到 Cmd 进程中的 ConEmu 显示的。(整个“Cmder”窗口实际上是康埃穆

因此从技术上讲,您的所有命令仍然通过 Cmd 运行,但注入的 Clink 库提供了高级功能,例如制表符补全和类似 Readline 的键绑定。

但除了 Cmd.exe 之外,还可以运行任何其他 shell在 Cmder 中,例如 PowerShell 或 Bash(它不是 Windows 的一部分,但在 Linux 上是标准,并且通常与 Git For Windows 一起安装)。

然而据我了解,模拟器需要运行 shell 才能将用户命令传达给操作系统

从某种意义上说是的,尽管 shell 并非仅仅“运行”命令所必需的(任何进程都可以随时启动任何 .exe 文件;这就是创建 shell 的初衷);相反,它们的工作是解释命令——它们提供 if/for/while 循环、%variable% 扩展等功能。除此之外,它们没有其他程序无法访问的操作系统功能。1

(因此从理论上讲,一个终端可以显示自己的提示并实现自己的命令语言,但这很少这样做,因为大多数人已经习惯了 Bash 语法。)


1(这适用于 Windows 和所有类 Unix 系统,但不一定适用于全部操作系统。例如,OpenVMS 中的 DCL 命令 shell 实际上比普通程序具有更高的权限,当时许多操作系统都是如此 - 可能是 Unix 打破了这一传统,其 shell 是一个完全正常且可替换的工具。

相关内容