Unix shell 在启动时读取.bashrc
文件并执行其中写入的命令。这个文件是什么?它会执行什么?
答案1
实际上,它的bash
具体含义是.bashrc
(和/etc/bash.bashrc
)。有很多不同的 shell。
这bash 手册页(作者:Brian Fox 和 Chet Ramey;另见信息页面“Bash 启动文件”) 是权威参考:
当启动非登录 shell 的交互式 shell 时,
~/.bashrc
如果文件存在,bash 将从中读取并执行命令。可以使用--norc
选项来禁止此操作。file--rcfile
选项将强制 bash 从 file 而不是 中读取并执行命令~/.bashrc
。例如,当以非交互方式启动 bash 以运行 shell 脚本时,它会
BASH_ENV
在环境中查找变量,如果变量出现则扩展其值,并使用扩展的值作为要读取和执行的文件的名称。Bash 的行为就像执行了以下命令一样:if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
但变量的值
PATH
不用于搜索文件名。
该文件只是 shell 命令。它通常用于更改提示符、设置环境变量和定义 shell 过程。传统上,该文件.profile
用于此目的,但它bash
有太多扩展,因此需要自己的启动文件,以便用户能够巴什主义在启动文件中。
“不是登录 shell“ 意味着诸如脚本启动之类的事情,通常由窗口管理器启动终端窗口。有时我会设置 *nix 系统.bashrc
并BASH_ENV
只使用 source .profile
。只要您不偏离 POSIX shell 命令,那么您将在任何 shell 中获得相同的初始化。
sh
当真的是时,它特别有价值bash
,这种情况有时会发生。要做到这一点,请使用:
. .profile
这一切如此复杂的一个原因是,有时人们会将产生输出的内容放入 shell 启动文件中,或者无条件地设置提示。这在运行 shell 程序和语言中的反引号命令时会导致很多问题,更不用说system(3)
C 程序了。我认为,启动方式bash
的设计是让一个文件的输出和提示设置正常,而另一个文件则不正常。传统上,会进行运行时测试来区分交互性,例如,检查提示是否已设置。
答案2
当 Bash 启动时,它会执行各种不同脚本中的命令。
当 Bash 作为交互式登录 shell 调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个存在且可读的文件中读取并执行命令。
当登录 shell 退出时,Bash 会从文件 ~/.bash_logout 中读取并执行命令(如果存在)。
当启动非登录 shell 的交互式 shell 时,如果 ~/.bashrc 文件存在,Bash 会从该文件读取并执行命令。可以使用 --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 $ "
答案3
它应该包含你的 shell 的各种“初始化”命令,例如:
- 创建有用的别名(例如
alias ll='ls -l'
)。 - 向 PATH 添加更多目录。
- 设置新的环境变量。