我已经使用了许多不同的基于*nix的系统,看起来我使用的Bash的每种风格都有不同的算法来决定运行哪些启动脚本.出于设置环境变量和别名以及打印启动消息(例如MOTD)等任务的目的,启动脚本是否适合执行这些操作?
是什么把事情之间的差异.bashrc
,.bash_profile
以及.environment
?我也看到其他的文件,例如.login
,.bash_login
和.profile
; 这些是否相关?在物理登录,通过ssh远程登录以及打开新的终端窗口时,运行哪些不同?跨平台(包括Mac OS X(及其Terminal.app)和Cygwin Bash)是否存在显着差异?
与外壳配置文件的主要区别是,有些只能通过"登录"弹阅读(例如,当您从另一台主机,或在本地UNIX机器的文本控制台登录登录).这些是所谓的,.login
或者说.profile
或者.zlogin
(取决于你使用的是哪个shell).
然后,你必须由"互动"弹读(如在配置文件中,那些连接到终端(或伪终端的,比方说,下一个窗口系统运行终端仿真器的情况下).这些都是名字的那些像.bashrc
,.tcshrc
,.zshrc
等等.
bash
这复杂化在.bashrc
中只有一个外壳,既是阅读互动和非登录,所以你会发现大多数人最终会告诉他们.bash_profile
也阅读.bashrc
喜欢的东西
[[ -r ~/.bashrc ]] && . ~/.bashrc
其他shell的行为方式不同 - 例如zsh
,.zshrc
对于交互式shell,始终读取,无论是否为登录shell.
bash的手册页解释了读取每个文件的环境.是的,机器之间的行为通常是一致的.
.profile
只是最初使用的登录脚本文件名/bin/sh
.bash
通常向后兼容/bin/sh
,.profile
如果存在,将读取.
这很简单.它的解释man bash
如下:
/bin/bash The bash executable /etc/profile The systemwide initialization file, executed for login shells ~/.bash_profile The personal initialization file, executed for login shells ~/.bashrc The individual per-interactive-shell startup file ~/.bash_logout The individual login shell cleanup file, executed when a login shell exits ~/.inputrc Individual readline initialization file
登录shell是您登录时读取的(例如,仅在启动xterm时不会执行).还有其他登录方式.例如,使用X显示管理器.这些还有其他方法可以在登录时读取和导出环境变量.
另请阅读INVOCATION
手册中的章节.它说:"以下段落描述了bash如何执行其启动文件." ,我认为这是一个现场:)它解释了什么是"互动"外壳也是如此.
Bash不知道.environment
.我怀疑这是你的发行版的一个文件,用于设置独立于你驱动的shell的环境变量.
经典地,~/.profile
由Bourne Shell使用,并且可能由Bash支持作为遗留度量.同样,~/.login
和~/.cshrc
使用由C外壳-我不知道Bash使用它们.
在~/.bash_profile
将被使用一次,在登录.~/.bashrc
每次启动shell时都会读取该脚本.这类似于/.cshrc
C Shell.
一个后果是,在东西~/.bashrc
应该是轻量级(最少)地启动非登录shell时减少开销.
我相信该~/.environment
文件是Korn Shell的兼容性文件.
我在这里找到了关于.bashrc和.bash_profile的信息来总结它:
登录时执行.bash_profile.你放入的东西可能是你的PATH和其他重要的环境变量.
.bashrc用于非登录shell.我不确定这意味着什么.我知道RedHat每次启动另一个shell时都会执行它(su给这个用户或者只是再次调用bash)你可能想把别名放在那里但是我不知道那意味着什么.我自己完全忽略它.
.profile相当于root的.bash_profile.我认为名称已更改为让其他shell(csh,sh,tcsh)也使用它.(你不需要一个用户)
还有.bash_logout执行,是的好猜...退出.你可能想要停止deamons甚至做一点管家.如果要在注销时清除屏幕,还可以在其中添加"清除".
也有一个完整的跟进每个配置文件在这里
这些甚至可能是依赖于发行版的,并非所有的发行版都选择与它们进行各种配置,而有些发行版甚至更多.但是当它们具有相同的名称时,它们通常包含相同的内容.