【问题标题】:What actually occurs within UNIX OS upon swapping shells交换 shell 时 UNIX 操作系统中实际发生的情况
【发布时间】: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。

标签: shell unix


【解决方案1】:

我了解进入不同的 shell 会通过对其他应用程序等的命令产生不同的功能。

这是不正确的。

作为用户,您以交互方式使用哪个 shell与使用哪个 shell 应用程序在使用 system() C 库调用或任何等效项(编写良好的应用程序不会首先不要这样做:好的做法是在需要时直接调用exec-family 来启动外部命令,根本不使用临时外壳)。因此,用户的交互式 shell 没有机制来选择应用程序的行为方式,因为它实际上并没有做出任何这样的选择。

当您的 shell 是 ksh 时,它是 ksh 提供您正在输入的实际交互式提示;将您键入的命令与其别名、函数和内置命令进行比较,并在您传递它时找到要运行的外部命令——但是如果您传递一个外部命令,一旦该命令运行,它就不知道哪个 shell 调用了它(除非该信息以环境变量(例如$SHELL)导出,并且不会基于相同的内容更改其行为。

【讨论】:

  • 谢谢查尔斯。我站得更正了。我正在使用几年前购买的培训 DVD。在继续之前,我会找到更新的培训媒体
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 2011-02-16
  • 2010-12-28
  • 2020-06-21
  • 1970-01-01
  • 2017-04-17
相关资源
最近更新 更多