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

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

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

或者这些概念是正交的,会产生四种不同的组合?

我试图清楚地了解.bashrc脚本.bash_profile在各种情况下的来源,并且我发现文章有时会互换使用这些概念。

答案1

  • 登录shell:登录 shell 将您作为特定用户登录到系统。为此需要用户名和密码。当您点击ctrl+ alt+F1登录虚拟终端时,成功登录后您会得到:登录 shell(交互式)。来源文件:

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

    • /etc/bashrc对于~/.bashrcbash
  • 交互的shell:shell(登录或非登录),您可以在其中交互地键入或中断命令,例如 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

相关内容