交互式 shell、非交互式 shell、登录 shell 和非登录 shell 之间有什么区别?

交互式 shell、非交互式 shell、登录 shell 和非登录 shell 之间有什么区别?

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

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

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

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

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

答案1

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

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

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

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

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

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

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

答案2

对于一些从未将计算机与 Internet 断开连接的人来说,他们可能会感到奇怪,因为他们已经附带了许多有关 UNIX 系统的答案。例如,男人狂欢,“调用”部分:

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

相关内容