題 什麼是.bashrc文件?


啟動時讀取Unix shell .bashrc 文件並執行寫在其中的命令。這個文件是什麼,它執行什麼?


92
2017-09-30 15:54


起源


嘗試在文本編輯器中打開文件 - 它是純文本。 - Will Bickford


答案:


實際上,它是 bash 特別是讀 .bashrc (和 /etc/bash.bashrc)。有很多不同的貝殼。

bash手冊頁 (由布萊克福克斯和切特拉米;也 信息頁面“Bash啟動文件”)是權威參考:

當一個交互式shell不是   一個登錄shell啟動,bash讀取   並執行命令 ~/.bashrc,   如果該文件存在。這可能是   通過使用抑制 --norc 選項。   該 --rcfile 文件選項將強制執行   bash從中讀取和執行命令   文件而不是 ~/.bashrc

當bash啟動時   非交互式地運行shell   腳本,例如,它尋找   變量 BASH_ENV 在環境中,   如果它出現在那裡,它會擴大它的價值,   並使用擴展值作為   要讀取和執行的文件的名稱。   Bash表現得如下   命令執行:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi  

但價值 PATH 變量不用於搜索   為文件名。

該文件只是shell命令。它通常用於更改提示,設置環境變量和定義shell過程。傳統上,文件 .profile 用於此目的,但是 bash 有這麼多的擴展,它需要自己的啟動文件給想要放置的用戶 bash化 在啟動文件中。

不是登錄shell“意味著像腳本啟動這樣的東西,通常是由窗口管理器啟動的終端窗口。有時我設置* nix系統 .bashrc 和 BASH_ENV 只是來源 .profile。只要你不偏離POSIX shell命令,那麼你將在任何shell中獲得相同的初始化。

它特別有價值 sh 是真的 bash,有時會發生。為此,請使用:

. .profile

這一切都非常複雜的一個原因是因為有時候人們把產生輸出的東西放到shell啟動文件中,或者他們無條件地設置提示。當在語言中運行shell程序和反引號命令時,這會導致很多問題,更不用說了 system(3) 來自C程序。方式 bash 我認為,啟動設計有一個文件,其中輸出和提示設置正常,一個文件不是。傳統上,將進行運行時測試以區分交互性,例如,檢查是否設置了提示。


61
2017-09-30 15:57



好答案。只是一些引用:該文件只是shell命令。它通常用於更改提示,設置環境變量和定義shell過程。 - smwikipedia
有誰知道.bashrc / .zshrc的rc部分是什麼意思? - WORMSS
@WORMSS:好問題! 你並不是唯一一個對此感到疑惑的人。 - Caleb Xu


當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 $ "

12
2017-09-30 15:56



為什麼是 .profile 後 .bash_profile?任何邏輯? - Pacerier


它應包含shell的各種“初始化”命令,例如:

  • 創建有用的別名(例如 alias ll='ls -l')。
  • 向PATH添加更多目錄。
  • 設置新的環境變量。

9
2017-09-30 15:56



什麼是別名? - pineapple
@pineapple:別名是一種運行命令的方法,命令可能很長,而且命令較短。例如,別名 ll='ls -l' 讓你輸入 ll 執行 ls -l 命令。 - Wuffers