Bash 手册说:
登录 shell 的参数零的第一个字符是“-”,或者使用 --login 选项调用。
它根据启动登录 shell 的方式定义了登录 shell。
或者,可以根据其预期目的来定义登录 shell 吗?
例如,登录shell是否可以定义为需要用户登录的shell?例如,在交互式非登录 bash shell 中,当我运行bash --login
创建 bash 登录 shell 时,我不必登录。是因为我的用户名和密码被隐式缓存并重用,还是只是它不执行登录的工作?
如果登录 shell 不一定必须执行登录,那么它的预期目的是什么,可以区分登录 shell 和非登录 shell 的特点吗?
谢谢。
答案1
登录是由 shell 以外的工具处理的,例如 login
本身,或您的桌面管理器(在 PAM 和各种其他工具的帮助下)。
这目的登录 shell 的作用不是处理登录,而是作为登录会话中的第一个 shell 进行适当的操作:主要是,这意味着处理每个登录会话只应处理一次的启动文件,并保护登录会话免受不必要的交互某些系统功能(特别是作业暂停)。
至少登录 shell 的细节在 Bash 中实现, 如下面所述:
- 登录 shell 处理来自 的命令,然后是它在、和
/etc/profile
之间找到的第一个文件(除非它是启动的非交互式登录 shell~/.bash_profile
~/.bash_login
~/.profile
没有选项--login
); - 退出登录 shell 运行
logout
而不是exit
; - 退出登录 shell 会挂起所有作业;
- 登录 shell 无法暂停;
- 登录 shell 设置
HOME
变量(POSIXly 正确模式除外); - 登录 shell 设置
login_shell
shell 选项。
答案2
你已经回答了自己的问题。
当我运行
bash --login
创建 bash 登录 shell 时,我不必登录
这意味着您已经登录并已经拥有一个允许您使用您的用户权限启动应用程序的环境。
幸运的是,您登录后不必每次启动应用程序时都输入密码。
主要区别在于使用选项-l
或--login
:
[bash] 首先尝试按顺序读取并执行 /etc/profile 和 ~/.profile 中的命令。
(摘自man bash
)。
目的是从/etc/profile
和中受益~/.profile
。bash
是一个 shell,而不是处理用户会话的组件。PAM
是负责通过您的登录名/密码识别您身份的 Linux 组件。