作为交互式登录 shell 调用,或使用 --login 调用
当 Bash 作为交互式登录 shell 或作为带有 --login 选项的非交互式 shell,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,并从第一个存在且可读的文件中读取并执行命令。启动 shell 时可以使用 --noprofile 选项来禁止此行为。
当交互式登录 shell 退出或非交互式登录 shell 执行 exit 内置命令时,Bash 会从文件 ~/.bash_logout(如果存在)中读取并执行命令。
作为交互式非登录 shell 调用
...
非交互调用
当 Bash 启动时非交互地,例如,要运行 shell 脚本,它会在环境中查找变量 BASH_ENV,如果它出现在其中,则扩展其值,并使用扩展后的值作为要读取和执行的文件的名称。 Bash 的行为就像执行了以下命令:
如果[-n“$BASH_ENV”];然后 。 “$BASH_ENV”;菲
但 PATH 变量的值不用于搜索文件名。
如上所述,如果使用 --login 选项调用非交互式 shell,Bash 会尝试从登录 shell 启动文件读取并执行命令。
非交互式登录 shell 属于哪种情况,第一种情况还是第三种情况?
第一种情况“作为交互式登录 shell 调用,或使用 --login 调用”包含“使用 --login 选项的非交互式 shell”的场景,所以我推断出
第一种情况是登录 shell,无论是交互式还是非交互式,并且
第三种情况是非交互式非登录 shell。
我对么?
谢谢。
答案1
不,你不正确。 Bash 的行为如文档所述:
- 第一部分适用于交互式登录 shell,以及以 标志启动的非交互式 shell
--login
; - 第三部分适用于非交互式 shell,包括非交互式登录 shell不是从旗帜开始
--login
。
shell 可以是不带--login
标志的登录 shell。如果您/proc/$$/cmdline
在 Linux 系统上查看通过 SSH 启动的 Bash shell,您会发现它的启动方式为-bash
— 前导连字符是启动登录 shell 的常用方式,如果它结束,则不包含在第一部分中成为非交互式的。然而,如果出于某种原因想要一个非交互式登录 shell,人们通常会使用--login
它来获取它。