UNIX:完整参考,第二版,作者:Kenneth H. Rosen 等人。
登录后可以使用 shell 的名称作为命令来启动另一个 shell;例如,要启动 Korn shell,您可以在命令提示符下键入 ksh。这种类型的 shell 不是登录 shell,您不必再次登录即可使用它,但它仍然是交互式 shell,这意味着您通过键入命令与 shell 进行交互(而不是使用 shell 进行交互)。运行一个脚本,如第 20 章所述)。使用图形界面时在终端窗口中运行的 shell 实例也是交互式非登录 shell。当您启动非登录 shell 时,它不会读取您的 .profile、.bash_profile 或 .login 文件(或 .logout 文件),但它仍会读取第二个 shell 配置文件(例如 .bashrc)。这意味着您可以通过启动另一个 shell 实例来测试对 .bashrc 的更改,但如果您要测试对 .profile 或 .login 的更改,则必须注销然后重新登录才能查看结果。
我正在查看上面的内容,但我不明白交互式 shell 的含义。如果我使用终端,是否不会读取 .profile?
此外,当您说 bourne 不是交互式 shell 而 bash/csh 是交互式 shell 时,这是什么意思?
答案1
交互式 shell 只是您用来键入命令并从这些命令获取输出的任何 shell 进程。也就是说,您与之交互的外壳。
因此,您的登录 shell 是交互式的,就像您手动启动的任何其他 shell 一样,如您在问题中引用的摘录中所述。相比之下,当您运行 shell 脚本时,会启动一个非交互式 shell 来运行脚本中的命令,然后在脚本完成时退出。
Bourne shell 可以用作交互式 shell,就像bash
或一样tcsh
。事实上,许多系统,例如 FreeBSD,都使用 shellsh
作为默认用户 shell。像bash
、zsh
、等现代 shelltcsh
具有许多 Bourne shell 所没有的功能,这使得它们在交互使用时更加舒适和方便(命令历史记录、完成等)。
交互式非登录 shell(即从另一个 shell 手动启动的 shell 或通过打开终端窗口启动的 shell)不会读取您的.login
或.profile
文件。这些只能由登录 shell(由login
系统进程或 X 显示管理器启动的 shell)读取和执行,因此它们包含的命令和设置仅在登录会话开始时应用一次。因此,当您启动终端时,它为您生成的 shell 不会读取您的登录文件(.login
对于 c 样式 shell,.profile
对于 bourne 样式 shell),但它会读取.cshrc
等.bashrc
文件。