登录/非登录 shell 的概念与非交互式/交互式 shell 的概念(分别)相同吗?
或者这些概念是正交的,会产生四种不同的组合?
我试图清楚地了解.bashrc
脚本.bash_profile
在各种情况下的来源,并且我发现文章有时会互换使用这些概念。
答案1
登录shell:登录 shell 将您作为特定用户登录到系统。为此需要用户名和密码。当您点击ctrl+ alt+F1登录虚拟终端时,成功登录后您会得到:登录 shell(交互式)。来源文件:
/etc/profile
以及~/.profile
Bourne 兼容 shell(和/etc/profile.d/*
)~/.bash_profile
对于bash/etc/zprofile
对于~/.zprofile
zsh/etc/csh.login
对于~/.login
csh
未登录shell:无需登录即可执行的 shell。为此需要当前登录的用户。当您在 gnome 中打开图形终端时,它是一个非登录(交互式)shell。来源文件:
/etc/bashrc
对于~/.bashrc
bash
交互的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
。