Linux 上的 .bashrc 和 .profile 有什麼區別?

登錄到運行 Bash 的 Linux 機器會導致讀取某些文件。 他們設置了你的 shell 環境。 但是讀取哪些文件以及何時讀取可能會令人困惑。 這是真正發生的事情。

不同類型的外殼

啟動 shell 時獲得的環境由配置文件或配置文件中包含的設置定義。 這些包含設置諸如文本顏色、命令提示符、別名以及在您鍵入程序名稱時搜索可執行文件的路徑等信息。

在文件系統的不同位置有許多不同的文件,這些設置存儲在其中。 但在查看啟動 shell 時讀取了哪些文件之前,我們需要清楚您使用的是哪種 shell。

登錄 shell 是您登錄的 shell。 當您啟動計算機並登錄時,圖形桌面環境下方是一個登錄 shell。 如果您通過 SSH 連接連接到另一台計算機,您也將登錄到登錄 shell。

打開終端窗口時獲得的 shell 類型是非登錄 shell。 當您已經登錄時,您無需進行身份驗證即可啟動 shell。 登錄和非登錄 shell 是交互式 shell。 您可以通過鍵入說明、按“Enter”按鈕並閱讀屏幕上的響應來使用它們。

還有非交互式shell。 這些是執行腳本時啟動的 shell 類型。 該腳本在一個新的 shell 中啟動。 這案子 #!/bin/bash 在腳本的頂部指示使用哪個 shell。

                      #!/bin/bash

echo -e "Hello, World!n"
                    

此腳本將在非交互式 Bash shell 中運行。 請注意,雖然 shell 不是交互式的,但腳本本身可以。 該腳本打印到終端窗口,可以輕鬆接受用戶輸入。

9 個幫助您開始使用 Linux 的 Bash 腳本示例

非交互式外殼

非交互式 shell 在啟動時不會讀取任何配置文件。 它們繼承了環境變量,但對別名一無所知,例如它們是在命令行中定義的,還是在配置文件中定義的。

您可以通過查看作為命令行參數傳遞給它的選項來測試 shell 是否是交互式的。 如果選項中有“i”,則 shell 是交互式的。 這bash 特殊參數 $- 包含當前 shell 的命令行參數。

                      [[ $- == *i* ]] && echo 'Interactive' || echo 'Non-interactive'
                    

讓我們創建一個名為 xc 那將意味著“貓”。 我們還將檢查我們是否有 $PATH 變量集

                      alias xc=cat
                    
                      echo $PATH
                    

Establecer un alias y repetir el valor de $PATH

我們將嘗試從這個小腳本中訪問兩者。 將此腳本複製到編輯器中並將其保存為“int.sh”。

                      #!/bin/bash

xc ~/text.dat
echo "Variable=$PATH"
                    

我們將不得不使用 chmod 使腳本可執行。

                      chmod +x int.sh
                    

Usando chmod para hacer un script ejecutable

讓我們運行我們的腳本:

                      ./int.sh
                    

Ejecutar un script que no puede acceder a un alias pero puede acceder a variables de entorno heredadas

在您的非交互式 shell 中,我們的腳本不能使用別名,但可以使用環境變量。 交互式 shell 在使用配置文件和配置文件方面更有趣。

如何在 Linux 上的 Bash 中設置環境變量

交互式登錄外殼

有兩種類型的交互式登錄 shell。 一種是允許您登錄計算機的外殼。 在桌面上,這通常是作為桌面環境基礎的外殼。 無論您使用的是窗口化桌面環境還是平鋪桌面環境,都必須通過 Linux 系統對您進行身份驗證並允許您登錄。

在沒有安裝桌面環境的服務器上,直接登錄到交互式 shell。 您可以通過離開桌面環境並訪問終端在台式計算機上執行相同的操作。 在 GNOME 中,您可以使用組合鍵 Ctrl+Alt+F3 來執行此操作。 要返回 GNOME 會話,請按組合鍵 Ctrl+Alt+F2。 您通過 SSH 連接的 shell 也是一個登錄 shell。

調用的配置文件和配置文件可以使用環境變量進行配置,因此它們可能因發行版而異。 此外,並非所有發行版都使用所有文件。 在通用 Bash 安裝中,交互式登錄 shell 讀取“/etc/profile”文件。 這包含整個系統的 shell 配置選項。 如果它們存在,該文件還會讀取“/etc/bash.bashrc”和“/usr/share/bash-completion/bash_completion”等文件。

然後 Bash 會查找“~/.bash_profile”文件。 如果它不存在,Bash 會查找“~/.bash_login”文件。 如果該文件不存在,Bash 會嘗試查找“.profile”文件。 一旦找到並讀取其中一個文件,Bash 就會停止搜索。 因此,在大多數情況下,不太可能讀取“~/.profile”。

你經常會在你的“~/.bash_profile”文件中找到類似的東西,或者作為一種備份,在你的“~/.profile”文件中:

                      # if running bash
if [ -n "$BASH_VERSION" ]; then
  # include .bashrc if it exists
  if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
  fi
fi
                    

這將檢查活動 shell 是否為 Bash。 如果是這樣,它會查找“~/.bashrc”文件並在找到時讀取它。

無需登錄的交互式 shell

沒有 Bash 登錄的交互式 shell 會顯示“/etc/bash.bashrc”,然後讀取文件“~/.bashrc”。 這允許 Bash 具有系統範圍和用戶特定的設置。

在編譯 Bash 時,可以使用編譯器標誌更改此行為,但是找到不獲取和讀取“/etc/bash .bashrc”文件的 Bash 版本將是一種罕見且特殊的情況。

每次在桌面上打開終端窗口時,這兩個文件都用於為該交互式非登錄 shell 設置環境。 由應用程序啟動的 shell 也是如此,例如Geany 的 IDE.

你應該把你的配置代碼放在哪裡?

放置個人定制代碼的最佳位置是在“~/.bashrc”文件中。 您的別名和 shell 函數可以在“~/.bashrc”中定義,並且可以在所有交互式 shell 中讀取並提供給您。

如果您的發行版沒有在登錄 shell 中讀取您的“~/.bashrc”,並且您希望它這樣做,請將此代碼添加到您的“~/.bash_profile”文件中。

                      # if running bash
if [ -n "$BASH_VERSION" ]; then
  # include .bashrc if it exists
  if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
  fi
fi
                    

模塊化是最好的

如果您有很多別名,或者想在多台機器上使用相同的別名,最好將它們存儲在自己的文件中,並且與您的 shell 函數相同。 您可以從“~/.bashrc”文件中調用這些文件。

在我們的測試計算機上,別名存儲在一個名為“.bash_aliases”的文件中,一個名為“.bash_functions”的文件包含 shell 函數。

您可以像這樣從“~/.bashrc”文件中讀取它們:

                      # read in my aliases
if [ -f ~/.bash_aliases ]; then
  . ~/.bash_aliases
fi

# read in my shell functions
if [ -f ~/.bash_functions ]; then
  . ~/.bash_functions
fi
                    

這使您可以輕鬆地在計算機之間輕鬆移動別名和角色。 您只需將上述行添加到每台計算機上的“~/.bashrc”文件中,並將包含別名和 shell 函數的文件複製到每台計算機上的主目錄。

這意味著您不需要將一台計算機上的“~/.bashrc”中的所有定義復製到其他每台計算機上的“~/.bashrc”文件中。 這也比在計算機之間複製整個“~/.bashrc”文件要好,尤其是當它們在不同的發行版上運行 Bash 時。

總之

您真正需要了解的文件是:

  • /etc/profile:系統範圍的配置設置。 由登錄 shell 使用。
  • ~/.bash_profile:用於保存個人用戶的設置。 由登錄 shell 使用。
  • ~/.bashrc:用於保存個人用戶的設置。 由無需登錄的交互式 shell 使用。 它也可以從你的“~/.bash_profile”或“~/.profile”文件中調用,用於登錄shell。

一個方便的方法是將您的個人設置放在“~/.bashrc”中,並確保您的“~./bash_profile”文件調用您的“~/.bashrc”文件。 這意味著您的個人設置保存在一個文件中。 您將在登錄和非登錄 shell 之間獲得一致的 shell 環境。 將此與將別名和 shell 函數存儲在非系統文件中相結合是一種簡潔而強大的解決方案。

相關文章