交互式 shell、登录 shell、非登录 shell 及其用例之间有什么区别?

vfc*_*sts 95 shell bashrc

可能的重复:
登录 Shell 和非登录 Shell 之间的区别?

我一直在查看 /etc/profile。bash.bashrc 以查看它们是如何运行的,并注意一些是由非登录 shell 执行的,一些与交互式 shell 一起工作等。

这种类型的外壳有什么区别,即交互式和非交互式、登录和非登录等?

这个问题可能非常基本,但似乎我首先需要问什么是 shell。什么是 shell,它的相关性是什么,你如何使用它,以及它为什么存在?

更新:为了更好地理解问题的意图,除了定义之外,我还需要了解一种外壳或另一种外壳的用例。帮助理解的是用例,而不仅仅是字典定义。

Ton*_*nny 110

外壳是任何程序的通用名称,它为您提供与计算机交互的文本界面。您键入命令,输出将显示在屏幕上。

许多 shell 都具有脚本编写能力:将多个命令放入一个脚本中,shell 会执行它们,就好像它们是从键盘输入一样。大多数 shell 提供额外的编程结构,将脚本功能扩展到编程语言中。

在大多数 Unix/Linux 系统上,有多个 shell 可用:bash、csh、ksh、sh、tcsh、zsh 仅举几例。它们的不同之处在于它们为用户提供的用于操作命令的各种选项以及脚本语言的复杂性和功能。

交互式:顾名思义:交互式意味着命令通过键盘的用户交互运行。例如,shell 可以提示用户输入。

非交互式: shell 可能是从自动化进程运行的,因此它不能假设它可以请求输入或有人会看到输出。例如,也许最好将输出写入日志文件。

登录:意味着 shell 作为用户登录系统的一部分运行。通常用于执行用户需要/想要建立其工作环境的任何配置。

非登录:用户登录后运行的任何其他 shell,或由与登录用户无关的任何自动化进程运行的任何其他 shell。

  • @JonWadsworth 是的,它是交互式的。但是,它不是登录外壳。实际上,您的 XWindows GUI 环境(在您的情况下为 Cinnamon)充当某种登录外壳替代品。纯粹主义者不会将 XWindows 称为 shell,因为它是图形而不是基于文本的,但老实说。它具有相同的目的:为您提供一个启动器来启动其他程序,包括用于再次获取基于文本的 shell 的终端。 (7认同)
  • 所以,我正在运行 OSX,并且我已经登录并工作。现在我运行终端应用程序在命令提示符下执行一些工作。我显然处于交互式 shell 中。但我是在登录 shell 中,还是被认为是非登录 shell 中? (4认同)
  • @retrography,[对于 OSX,它将是一个登录 shell。](http://unix.stackexchange.com/q/119627/135943) (4认同)
  • 因此,当我在 Linux GUI(例如 Mint 17.1 Cinnamon)中并启动终端(例如 gnome-terminal)时,我是否启动了“交互式 shell”?这也是“登录外壳”,还是仅当我的用户配置文件登录到操作系统时(例如启动后)才“登录外壳”? (3认同)
  • 感谢您将它们分成可读的块。使它比我从 *Possible Duplicate* 链接和一些旧的在线文档中得到的更容易理解。 (2认同)

poi*_*ige 12

对于一些从未与 Internet 断开连接的人来说,意识到他们已经附带了许多有关 UNIX 系统的答案,这可能会很奇怪。例如,man bash,“调用”部分:

交互式 shell 是一个没有非选项参数并且没有 -c 选项的启动,其标准输入和错误都连接到终端(由 isatty(3) 确定),或者一个以 -i 选项启动。如果 bash 是交互式的,则设置 PS1 并且 $- 包括 i,允许 shell 脚本或启动文件测试此状态。

  • 这并没有真正回答 OP 的问题,这些信息只有熟悉概念的人才能理解——而且它也特定于 bash。 (14认同)