【发布时间】:2016-03-07 17:39:58
【问题描述】:
我目前正在学习 UNIX,一切顺利。刚刚介绍了不同的 shell,即 Bourne SHell (sh)、Bourne Again SHell (BASH) 和 Korn SHell (KSH) 等,我知道进入不同的 shell 可以通过命令向其他应用程序等提供不同的功能。但我是什么当说我从 sh 转到 ksh 时,不清楚 UNIX 操作系统中的“开关”是什么?只是它转到文件结构中的不同位置还是什么?
【问题讨论】:
-
Shell 提供了该功能。这并不是说有一些单独的东西在后台使用 shell 并决定它正在使用哪个 shell——它直接是 shell 本身提供了你正在输入的提示。
-
另外,“使其他应用程序具有不同的功能”是完全错误的。应用程序不会调用调用它们的父 shell;他们通常在想要运行 shell 命令时调用
/bin/sh,并且不会根据用户选择的交互式 shell 更改哪个 shell。 (在 POSIX 系统上运行sh应该是获得符合 POSIX 的 shell 的保证,但是所有 POSIX sh、bash 和 ksh 都符合 POSIX。Bourne sh 不符合 POSIX——标准来了1991 年出局,Bourne 是 70 年代的人——但再也没有人运送 Bourne)。 -
...所以,在您的问题中声称
sh是 Bourne shell 本身就是一种误解;几十年来唯一推出 Bourne 的操作系统供应商是Sun,他们终于停止了这种做法;在任何地方都保持理智,/bin/sh类似于 ash 或 dash,并且完全符合 POSIX sh,而不是 Bourne。