.bashrc 文件是什么?

pin*_*ple 114 unix bashrc

Unix shell 启动时读取.bashrc文件并执行写入其中的命令。这个文件是什么,它执行什么?

Dig*_*oss 74

实际上,它bash特别是读取.bashrc(和/etc/bash.bashrc)。有很多不同的贝壳。

bash的手册页(由Brian Fox和切特·拉梅;同时信息页面“Bash的启动文件”)是最权威的参考:

当一个不是登录 shell 的交互式 shell 启动时,bash 读取并执行来自 的命令~/.bashrc(如果该文件存在)。这可以通过使用--norc选项来禁止。该--rcfile文件选项将强制bash读取和文件,而不是执行命令~/.bashrc

例如,当 bash 以非交互方式启动时,要运行一个 shell 脚本,它会BASH_ENV在环境中查找变量,如果它出现在那里,就展开它的值,并使用展开的值作为文件名来读取和执行。Bash 的行为就像执行了以下命令:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi  
Run Code Online (Sandbox Code Playgroud)

PATH变量的值不用于搜索文件名。

该文件只是shell命令。它通常用于更改提示、设置环境变量和定义外壳程序。传统上,该文件.profile用于此目的,但它bash有很多扩展名,以至于想要将bashisms放在启动文件中的用户需要自己的启动文件。

不是登录外壳”意味着脚本启动和通常由窗口管理器启动的终端窗口之类的东西。有时我将 *nix 系统设置为拥有.bashrcBASH_ENV仅 source .profile. 只要您不偏离 POSIX shell 命令,那么您将在任何 shell 中获得相同的初始化。

shis real 时特别有价值bash,这有时会发生。要做到这一点,请使用:

. .profile
Run Code Online (Sandbox Code Playgroud)

这一切如此复杂的一个原因是,有时人们会将产生输出的东西放入 shell 启动文件中,或者他们无条件地设置提示。在语言中运行 shell 程序和反引号命令时,这会导致很多问题,更不用说system(3)C 程序了。bash我认为,启动方式设计为具有一个输出和提示设置正常的文件和一个不正常的文件。传统上,将进行运行时测试以区分交互性,例如,检查是否设置了提示。

  • @WORMSS:好问题![您不是唯一对此感到疑惑的人](https://unix.stackexchange.com/questions/3467/what-does-rc-in-bashrc-stand-for)。 (6认同)
  • 有谁知道 .bashrc/.zshrc 的 rc 部分是什么意思? (5认同)

小智 13

当 Bash 启动时,它会执行各种不同脚本中的命令。

当 Bash 作为交互式登录 shell 被调用时,它首先从文件 /etc/profile 读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个存在且可读的命令中读取和执行命令。

当登录 shell 退出时,Bash 从文件 ~/.bash_logout(如果存在)读取并执行命令。

当一个不是登录 shell 的交互式 shell 启动时,Bash 从 ~/.bashrc 读取并执行命令(如果该文件存在)。这可以通过使用 --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 $ "
Run Code Online (Sandbox Code Playgroud)


小智 11

它应该包含您的 shell 的各种“初始化”命令,例如:

  • 创建有用的别名(例如alias ll='ls -l')。
  • 向 PATH 添加更多目录。
  • 设置新的环境变量。

  • @pineapple:别名是一种运行命令的方法,它可能很长,而命令较短。例如,别名 `ll='ls -l'` 允许您键入 `ll` 来执行 `ls -l` 命令。 (2认同)