其实,具体到bash
,就是.bashrc
(和/etc/bash.bashrc
)。有很多不同的shell。
在bash man page(作者:Brian Fox和Chet Ramey;也是info page “Bash Startup Files” ]的权威参考:
当一个非登录shell的交互式shell启动时,bash会从
~/.bashrc
中读取并执行命令,如果该文件存在的话。这可以通过使用--norc
选项来抑制。例如,当bash在非交互式启动时,为了运行一个shell脚本,它会在环境中寻找
--rcfile
这个变量,如果在环境中出现了~/.bashrc
,就会扩展它的值,并将扩展后的值作为文件名来读取和执行。Bash的行为就像执行下面的命令一样:if [-n "$BASH_ENV"]; then . "$BASH_ENV"; fi
,但不使用
BASH_ENV
变量的值来搜索文件名。它通常用于更改提示、设置环境变量、定义shell程序等。传统上,PATH
这个文件是用来做这个用途的,但.profile
的扩展名太多,以至于想要在启动文件中放入bashisms的用户需要自己的启动文件。"
“不是登录shell"的意思是脚本启动之类的东西,通常是由窗口管理器启动的终端窗口。有时候,我在*nix系统中设置了bash
和.bashrc
只是源码BASH_ENV
。只要你不超出POSIX shell命令的范围,那么在任何shell中都可以得到相同的初始化。 这在运行shell程序和语言内的backtick命令时就会造成很多问题,更不用说C程序中的.profile
了。我认为,sh
的启动方式是设计成一个输出和提示符设置没有问题的文件和一个不符合要求的文件。传统上会做一个运行时测试来区分交互性,比如检查提示符是否设置好了。
当Bash启动时,它会在各种不同的脚本中执行命令。
当Bash作为交互式登录shell被调用时,它首先从/etc/profile文件中读取并执行命令,如果该文件存在的话。读取该文件后,它会依次查找 ~/.bashprofile、 ~/.bashlogin 和 ~/.profile,然后从第一个存在且可读的文件中读取并执行命令。
当登录 shell 退出时,Bash 会从 ~/.bash_logout 文件中读取并执行命令,如果该文件存在的话。这可以通过使用 —norc 选项来抑制。使用 –rcfile 文件选项将强制Bash从文件中读取和执行命令,而不是 ~/.bashrc。 http://en.wikipedia.org/wiki/Bash_(Unix_shell)
这里有一些技巧和提示: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html
让我们试着设置提示符,让它显示今天的日期和主机名:
PS1="\d \h $ "
它应该包含各种 “初始化 "命令,例如:
alias ll='ls -l'
)。