標籤:

.bashrc文件和.bash_profile文件的區別?

.bashrc文件和.bash_profile文件的區別 求高手


你好,我們這邊是

廣東linux公共服務技術支持中心

的,Linux系統默認使用的shell為bash,在shell啟動的時候會讀取根據情況讀取.bash_profile和.bashrc文件。

準確的說,當shell是互動式登錄shell時,讀取.bash_profile文件,如在系統啟動、遠程登錄或使用su -切換用戶時;當shell是互動式登錄和非登錄shell時都會讀取.bashrc文件,如:在圖形界面中打開新終端或使用su切換用戶時,均屬於非登錄shell的情況。

簡單的說,.bash_profile只在會話開始時被讀取一次,而.bashrc則每次打開新的終端時,都會被讀取。


正好今天在學習Bash,看到相關的知識點。兩個文件都是 shell 啟動時要讀取的 startup files。在不同的狀態下,讀取的文件及順序不一樣,一般按照如下規則進行:

interactive login shell 的形式調用,Files read

  • /etc/profile
  • ~/.bash_profile, ~/.bash_login or ~/.profile (first existing readable file is read)
  • ~/.bash_logout (upon logout)

interactive non-login shell 的形式調用,Files read:

  • ~/.bashrc //該文件通常指向 ~/.bash_profile

non-interactively, 腳本文件通常用這種方式。Files read:

  • defined by BASH_ENV

Invoked remotely,Files read:

  • ~/.bashrc

preference:Advantages of the Bourne Again SHell


~/.bash_profile 是互動式、login 方式進入 bash 運行的

~/.bashrc 是互動式 non-login 方式進入 bash 運行的

通常二者設置大致相同,所以通常前者會調用後者。

所以一般優先把變數設置在.bashrc裡面。

比如在crontab裡面執行一個命令,.bashrc設置的環境變數會生效,而.bash_profile不會。


login shell 和 non-login shell的最大區別在於讀取環境變數的配置文件不同


copy from man bash

When bash is invoked as an interactive login shell, or as a non-
interactive shell with the --login option, it first reads and exe‐
cutes commands from the file /etc/profile, if that file exists.
After reading that file, it looks for ~/.bash_profile,
~/.bash_login, and ~/.profile, in that order, and reads and executes
commands from the first one that exists and is readable. The
--noprofile option may be used when the shell is started to inhibit
this behavior.

When a login shell exits, bash reads and executes commands from the
file ~/.bash_logout, if it exists.

When an interactive shell that is not a login shell is started, bash
reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if
these files exist. This may be inhibited by using the --norc
option. The --rcfile file option will force bash to read and exe‐
cute commands from file instead of /etc/bash.bashrc and ~/.bashrc.

大概可以看出:

1. 配置文件有兩個級別, 系統級(/etc)和用戶級(~/), 每次調用優先調用系統級

2. profile用於登錄式shell, 而bashrc用於每個互動式shell


推薦閱讀:

Linux下有哪些遊戲值得推薦?
記錄一些 Linux 的一些軟體,主題,以及...
一般人用 Linux 算是找虐嗎?
基於什麼樣的理由或特徵可以判別某個系統是 Android 的修改版本而不是另一個基於 Linux 開發的系統?
Linux Kernel 4.0 中的 live patching 是如何實現的?

TAG:Linux |