当使用--login选项以交互方式调用,或者作为 sh 调用时,Bash 会读取/etc/profile的指令。这些指令通常设置 shell 变量PATH, USER, MAIL, HOSTNAME和HISTSIZE.
在某些系统中,umask 值在/etc/profile中配置;在其他系统中,此文件包含指向其他配置文件的指针,例如
/etc/inputrc,系统范围的 Readline 初始化文件,您可以在其中配置命令行响铃样式。
还有/etc/profile.d目录,其中包含配置特定程序的系统范围行为的文件。
您希望应用于所有用户环境的所有设置都应在此文件中。它可能看起来像这样
# /etc/profile # System wide environment and startup programs, for login setup PATH=$PATH:/usr/X11R6/bin # No core files by default ulimit -S -c 0 > /dev/null 2>&1 USER="`id -un`" LOGNAME=$USER MAIL="/var/spool/mail/$USER" HOSTNAME=`/bin/hostname` HISTSIZE=1000 # Keyboard, bell, display style: the readline config file: if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then INPUTRC=/etc/inputrc fi PS1="\u@\h \W" export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC PS1 # Source initialization files for specific programs (ls, vim, less, ...) for i in /etc/profile.d/*.sh ; do if [ -r "$i" ]; then . $i fi done # Settings for program initialization source /etc/java.conf export NPX_PLUGIN_PATH="$JRE_HOME/plugin/ns4plugin/:/usr/lib/netscape/plugins" PAGER="/usr/bin/less" unset i |
此配置文件设置了一些基本的 shell 环境变量,以及运行 Java 和/或 Java 应用程序在 Web 浏览器中所需的一些变量。请参阅 第 3.2 节。
有关此文件中使用的条件 if 的更多信息,请参阅 第 7 章;第 9 章 讨论了诸如 for 构造的循环。
Bash 源码包含示例profile文件,用于通用或个人使用。这些文件和上面示例中的文件都需要进行更改,以便它们在您的环境中工作!
在提供多种 shell 类型的系统上,最好将特定于 Bash 的配置放在此文件中,因为/etc/profile也会被其他 shell(例如 Bourne shell)读取。通过拆分不同类型 shell 的配置文件,可以防止不理解 Bash 语法的 shell 生成错误。在这种情况下,用户的~/.bashrc可能会指向/etc/bashrc以便将其包含在登录时的 shell 初始化过程中。
您可能还会发现/etc/profile在您的系统上仅保存 shell 环境和程序启动设置,而/etc/bashrc包含 shell 函数和别名的系统范围定义。
/etc/bashrc文件可能会在/etc/profile或在单个用户 shell 初始化文件中被引用。
该源码包含示例bashrc文件,或者您可以在/usr/share/doc/bash-2.05b/startup-files中找到副本。这是bashrcBash 文档附带的
alias ll='ls -l' alias dir='ls -ba' alias c='clear' alias ls='ls --color' alias mroe='more' alias pdw='pwd' alias sl='ls --color' pskill() { local pid pid=$(ps -ax | grep $1 | grep -v grep | gawk '{ print $1 }') echo -n "killing $1 (process $pid)..." kill -9 $pid echo "slaughtered." } |
的一部分。 除了通用别名外,它还包含有用的别名,即使您拼写错误,也可以使命令正常工作。 我们将在 第 3.5.2 节中讨论别名。 此文件包含一个函数 pskill; 函数将在 第 11 章中详细研究。
![]() | 我没有这些文件?! |
---|---|
默认情况下,这些文件可能不在您的主目录中;如果需要,请创建它们。 |
这是单独配置用户环境的首选配置文件。在此文件中,用户可以添加额外的配置选项或更改默认设置
franky~> cat .bash_profile ################################################################# # # # .bash_profile file # # # # Executed from the bash shell when you log in. # # # ################################################################# source ~/.bashrc source ~/.bash_login case "$OS" in IRIX) stty sane dec stty erase ;; # SunOS) # stty erase # ;; *) stty sane ;; esac |
此用户配置了不同操作系统上登录的退格字符。除此之外,用户的.bashrc和.bash_login也会被读取。
此文件包含特定设置,这些设置通常仅在您登录系统时执行。 在此示例中,我们使用它来配置 umask 值并在登录时显示已连接用户的列表。此用户还会获取当前月份的日历
####################################################################### # # # Bash_login file # # # # commands to perform from the bash shell at login time # # (sourced from .bash_profile) # # # ####################################################################### # file protection umask 002 # all to me, read to group and others # miscellaneous w cal `date +"%m"` `date +"%Y"` |
如果没有~/.bash_profile,则会读取此文件。
如果没有~/.bash_profile和~/.bash_login, ~/.profile将会被读取。它可以包含相同的配置,然后也可以通过其他 shell 访问这些配置。请注意,其他 shell 可能不理解 Bash 语法。
如今,使用非登录 shell 更为常见,例如,在使用 X 终端窗口以图形方式登录时。打开这样的窗口时,用户不必提供用户名或密码; 不进行身份验证。当发生这种情况时,Bash 会搜索~/.bashrc,因此它也在登录时读取的文件中被引用,这意味着您不必在多个文件中输入相同的设置。
在这个用户的.bashrc中,定义了几个别名,并且在系统范围的/etc/bashrc被读取之后,设置了特定程序的变量。
franky ~> cat .bashrc # /home/franky/.bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # shell options set -o noclobber # my shell variables export PS1="\[\033[1;44m\]\u \w\[\033[0m\] " export PATH="$PATH:~/bin:~/scripts" # my aliases alias cdrecord='cdrecord -dev 0,0,0 -speed=8' alias ss='ssh octarine' alias ll='ls -la' # mozilla fix MOZILLA_FIVE_HOME=/usr/lib/mozilla LD_LIBRARY_PATH=/usr/lib/mozilla:/usr/lib/mozilla/plugins MOZ_DIST_BIN=/usr/lib/mozilla MOZ_PROGRAM=/usr/lib/mozilla/mozilla-bin export MOZILLA_FIVE_HOME LD_LIBRARY_PATH MOZ_DIST_BIN MOZ_PROGRAM # font fix alias xt='xterm -bg black -fg white &' # BitchX settings export IRCNAME="frnk" # THE END franky ~> |
更多示例可以在 Bash 包中找到。 请记住,示例文件可能需要进行更改才能在您的环境中工作。
别名在 第 3.5 节中讨论。
此文件包含注销过程的特定说明。在此示例中,注销时会清除终端窗口。这对于远程连接非常有用,远程连接在关闭后会留下一个干净的窗口。
franky ~> cat .bash_logout ####################################################################### # # # Bash_logout file # # # # commands to perform from the bash shell at logout time # # # ####################################################################### clear franky ~> |
在对上述任何文件进行更改时,用户必须重新连接到系统,或者 source 更改后的文件才能使更改生效。通过以这种方式解释脚本,更改将应用于当前的 shell 会话。
大多数 shell 脚本都在私有环境中执行:变量不会被子进程继承,除非它们由父 shell 导出。 sourcing 包含 shell 命令的文件是一种将更改应用于您自己的环境并在当前 shell 中设置变量的方式。
此示例还演示了不同用户使用不同提示符设置的情况。在这种情况下,红色表示危险。当您有一个绿色提示符时,不要太担心。
请注意, source resourcefile 与 . resourcefile 相同。
如果您在所有这些配置文件中迷失,并发现自己面对 origin 不明确的设置,请使用 echo 语句,就像调试脚本一样;请参阅 第 2.3.2 节。您可以添加这样的行
echo "Now executing .bash_profile.." |
或像这样
echo "Now setting PS1 in .bashrc:" export PS1="[some value]" echo "PS1 is now set to $PS1" |