“login”和“交互式”bash shell之间有什么区别?

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

编辑:这是一个社区wiki,所以也许而不是投票closures你可以提供的例子,哪些情况下需要哪种types的$shell

启动脚本

当Bash开始时,它以各种不同的脚本执行命令。

当Bash作为交互式loginshell被调用时,它首先从文件/ etc / profile中读取和执行命令,如果该文件存在的话。 读取该文件后,它将按照该顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从第一个存在并读取的第一个中读取和执行命令。

当loginshell退出时,Bash从文件〜/ .bash_logout中读取并执行命令(如果存在)。

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

  • 维基百科

在loginshell的configuration文件中,你可以设置一些你在会话期间使用的东西,而只需要做一次。 一些想法:

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

在非loginshell的文件( .bashrc )中,你应该configuration你的shell:

  • 花式提示
  • 设置别名
  • 设置历史选项
  • 定义自定义shell函数
  • 导出环境variables,(也许PAGER,EDITOR如果系统范围设置吸)
  • 加载保存在.bash_profile ssh-agentvariables

通常情况下,您将包含以下内容的.bash_profile中的.bashrc 。 然后loginshell获取所有的自定义项, .bash_profile文件不需要复制已经在.bashrc东西。

 [[ -f ~/.bashrc ]] && . ~/.bashrc