source 是 Bash 內建命令,用於在當前 Shell 環境中讀取並執行指定腳本檔案的內容。它常用於重新載入環境變數配置(如 .bashrc、.bash_profile),或執行需修改當前 Shell 狀態的腳本。本文詳細解析其語法、特性與實戰場景。
source filename
# 或簡寫
. filename
注意: . 與檔名之間需有空格。source 來自 C Shell,. 來自 Bourne Shell,功能完全相同。
| 特性 | source / . | 直接執行腳本 (./script.sh) |
|---|---|---|
| 執行環境 | 當前 Shell(父 Shell) | 子 Shell |
| 環境變數修改 | 保留在當前 Shell | 子 Shell 結束即銷毀 |
| 需執行權限 | 不需要 | 需要 (chmod +x) |
| 別名/函數定義 | 生效於當前 Shell | 不生效 |
# 修改 ~/.bashrc 後立即生效
source ~/.bashrc
# 或
. ~/.bashrc
# Android 編譯環境
source build/envsetup.sh
# Python 虛擬環境啟動腳本
source venv/bin/activate
# lib.sh 定義了 log_info()、log_error() 等函數
source /path/to/lib.sh
log_info "服務啟動中..."
source script.sh arg1 arg2
# 腳本內可用 $1、$2 獲取參數
# 僅當檔案存在時載入
[ -f ~/.bash_aliases ] && source ~/.bash_aliases
source -x script.sh # 顯示每條執行命令(需 Bash 4.1+)
sh script.sh 載入配置: 這會啟動子 Shell,環境變數不會保留。exit: 在 source 執行的腳本中呼叫 exit 會直接關閉當前終端機/Shell。請改用 return。$PATH 中,需給出相對或絕對路徑(如 source ./config.sh)。source:影響當前 Shell 及其後續子 Shell(透過繼承)。export:將變數標記為環境變數,僅影響其後建立的子 Shell,不影響父 Shell 或同級 Shell。熟練使用 source 能大幅提升 Shell 配置管理與腳本開發效率,是 Linux 使用者必備技能。