登录/非登录和交互式/非交互式 shell

Mar*_*tus 32 shell bash

登录/非登录 shell 的概念与非交互式/交互式 shell 的概念(分别)相同吗?

或者概念正交产生四种不同的组合?

我想获得其清晰的画面.bashrc.bash_profile脚本获得各种情况下采购的,我发现,文章有时可以互换使用这些概念。

cha*_*aos 56

  • 登录shell:登录 shell 将您以特定用户身份登录到系统,这是必要的用户名和密码。当您点击ctrl+ alt+F1登录虚拟终端时,您会在成功登录后获得:登录外壳(即交互式)。来源文件:

    • /etc/profile~/.profileBourne 兼容的外壳(和/etc/profile.d/*
    • ~/.bash_profile 用于 bash
    • /etc/zprofile~/.zprofilezsh
    • /etc/csh.login~/.logincsh
  • 非登录shell:无需登录即可执行的 shell,为此必须是当前登录的用户。当您在 gnome 中打开图形终端时,它是一个非登录(交互式)shell。来源文件:

    • /etc/bashrc~/.bashrcbash
  • 交互式外壳:一种外壳(登录或非登录),您可以在其中交互式键入或中断命令。例如 gnome 终端(非登录)或虚拟终端(登录)。在交互式 shell 中,必须设置提示变量 ( $PS1)。来源文件:

    • /etc/profile~/.profile
    • /etc/bashrc/etc/bash.bashrc用于 bash
  • 非交互式shell:一个(子)shell,可能从一个自动化进程运行,当调用进程不处理它时,您将既看不到输入也看不到输出。该 shell 通常是非登录 shell,因为调用用户已经登录。运行脚本的 shell 始终是非交互式 shell,但脚本可以通过提示用户输入值来模拟交互式 shell。来源文件:

    • /etc/bashrc或者/etc/bash.bashrc对于 bash (但是,大多数情况下您会在脚本的开头看到这一点:[ -z "$PS1" ] && return。这意味着如果它是非交互式 shell,则不要做任何事情)。
    • 取决于外壳;其中一些读取$ENV变量中的文件。