萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Shell 啟動檔案完整解析:登入/非登入、互動/非互動的載入順序

理解 Shell 啟動檔案機制,能精準控制環境變數、別名、函數的生效範圍,避免「為何腳本讀不到 alias」的困擾。

Shell 分類

類型啟動方式典型場景
登入 Shell輸入帳密登入、bash --loginTTY、SSH、圖形登入後開啟終端機(視設定)
非登入 Shell已登入後執行 bash終端機分頁、腳本內 bash -c
互動式 Shell有提示字元、讀取標準輸入人工操作終端機
非互動式 Shell執行腳本、bash script.sh自動化部署、CI/CD

啟動檔案讀取順序

1. 互動式登入 Shell

  1. /etc/profile(全域)
  2. 依序尋找並讀取第一個存在:~/.bash_profile → ~/.bash_login → ~/.profile
  3. 通常在上述檔案末尾 source ~/.bashrc 載入互動設定。

2. 互動式非登入 Shell

  1. ~/.bashrc

系統層級 /etc/bash.bashrc(Debian/Ubuntu)或 /etc/bashrc(RHEL)常被 /etc/profile 呼叫。

3. 非互動式 Shell

預設不讀取任何啟動檔,除非環境變數 BASH_ENV 指向檔案路徑。

常見坑與對策

  • alias 不傳遞到腳本:非互動式 Shell 不讀 .bashrc。解法:在腳本開頭 source ~/.bashrc 或直接寫函數/完整路徑。
  • 環境變數未生效:確認是否在正確檔案(登入 vs 非登入)設定,並 export。
  • 圖形終端機不讀 .bash_profile:GNOME Terminal 預設啟動非登入 Shell,需在偏好設定勾選「Run command as a login shell」。

最佳實務範本

# ~/.bash_profile
[[ -f ~/.bashrc ]] && source ~/.bashrc

# ~/.bashrc
# 僅互動式才執行
[[ $- != *i* ]] && return
alias ll='ls -alF'
export PATH="$HOME/bin:$PATH"
# ... 其他互動設定
copyright © 萬盛學電腦網 all rights reserved