“登录”和“交互式” bash shell 之间有什么区别

Gar*_*eth 54 linux shell bash command-line-interface bashrc

“登录”和“交互式” bash shell 有什么区别?我在下面引用了维基百科,但有人能给出更好的答案吗?

编辑:这是一个社区维基,所以也许不是投票关闭,您可以提供示例说明哪些情况需要哪种类型的 $SHELL

启动脚本

当 Bash 启动时,它会执行各种不同脚本中的命令。

当 Bash 作为交互式登录 shell 被调用时,它首先从文件 /etc/profile 读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个存在且可读的命令中读取和执行命令。

当登录 shell 退出时,Bash 从文件 ~/.bash_logout(如果存在)读取并执行命令。

当一个不是登录 shell 的交互式 shell 启动时,Bash 从 ~/.bashrc 读取并执行命令(如果该文件存在)。这可以通过使用 --norc 选项来禁止。--rcfile 文件选项将强制 Bash 从文件而不是 ~/.bashrc 读取和执行命令。

hay*_*lci 19

在您的登录 shell 的配置文件中,您可以设置一些您将在会话期间使用的内容,并且只需要完成一次。一些想法:

  • 创建一个包含您连接的 IP 地址的临时文件,稍后您可以将其包含在一些设置防火墙规则的脚本中。
  • 运行 ssh-agent,询问您的 SSH 密钥,并将 SSH 代理环境变量存储在一个文件中。
  • 如果这是一台有限的机器,并且您的同事想知道彼此的登录信息,请写 (1) 条消息通知他们您的登录信息。

在非登录 shell 的文件 ( .bashrc) 中,您应该配置您的 shell:

  • 花式提示
  • 设置别名
  • 设置历史选项
  • 定义自定义 shell 函数
  • 导出环境变量,(如果系统范围的设置很糟糕,可能是 PAGER、EDITOR)
  • 加载保存在的 ssh-agent 变量 .bash_profile

通常,您会包括.bashrcfrom.bash_profile和以下内容。然后登录 shell 获取您的所有自定义设置,并且.bash_profile文件不必复制.bashrc.

[[ -f ~/.bashrc ]] && . ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

  • 现在,这是我能理解的答案:https://www.linuxquestions.org/questions/linux-general-1/difference-between-normal-shell-and-login-shell-14983/#post4828786 (5认同)
  • 当您刚接触机器时,登录 shell 是第一个启动的吗?在此之后打开的所有其他 shell 可能是也可能不是交互式的。从 cron 运行的 shell?似乎没有交互性,但它是登录吗?如果你不在机器上怎么办?这些都是没有答案的问题 (4认同)