.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
~/.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 |