使用 source 命令將函數和變數導入 Bash
登錄 Linux shell 時,你將繼承特定的工作環境。對於 shell 而言,「 環境 」意味著已經為你設置了某些變數,以確保你的命令可以按預期工作。例如,PATH 環境變數定義 shell 從哪裡查找命令。沒有它,幾乎在 Bash 中嘗試執行的所有操作都會因「命令未發現」 錯誤而失敗。在執行日常任務時,環境對你幾乎是不可見的,但它很重要。
有多種方法可以影響你的 shell 環境。你可以在配置文件中進行修改,例如 ~/.bashrc
和 ~/.profile
,你可以在啟動時運行服務,還可以創建自己的自定義命令或編寫自己的 Bash 函數 。
通過 source 添加到你的環境
Bash(以及其他一些 shell)有一個稱為 source
的內置命令。這就是令人困惑的地方:source
執行與命令 .
相同的功能(是的,那只是一個點),而與 Tcl
命令的 source
不是同一個(如果你輸入 man source
,也許在屏幕上顯示的是它)。實際上,內置的 source
命令根本不在你的 PATH
中。這是 Bash 附帶的命令,要獲取有關它的更多信息,可以輸入 help source
。
.
命令兼容 POSIX。 但 source
命令不是 POSIX 定義的,但可以與 .
命令互換使用。
根據 Bash help
,source
命令在你當前的 shell 中執行一個文件。 「在你當前的 shell 中」 這句很重要,因為它表示它不會啟動子 shell。因此,用 source
執行的任何操作都發生在內部並影響當前環境。
在探討 source
對環境的影響之前,請用 source
命令導入一個測試文件,以確保其按預期執行代碼。首先,創建一個簡單的 Bash 腳本並將其保存為 hello.sh
:
#!/usr/bin/env bash
echo "hello world"
使用 source
,即使該腳本不設置可執行也可以運行:
$ source hello.sh
hello world
你也可以使用內置的 .
命令獲得相同的結果:
$ . hello.sh
hello world
source
和 .
命令成功地執行了測試文件的內容。
設置變數和導入函數
你可以使用 source
將文件 「導入」 到 shell 環境中,就像你可以在 C 或 C++ 中使用 include
關鍵字引用一個庫,或者在 Python 中使用 import
關鍵字引入一個模塊一樣。這是 source
的最常見用法之一,它也是 .bashrc
中的一個默認包含方式,通過 source
導入 .bash_aliases
,以便將任何你自定義的別名在登錄時導入到你的環境。
這是導入 Bash 函數的示例。首先,在名為 myfunctions
的文件中創建一個函數。它將列印你的公共 IP 地址和本地 IP 地址:
function myip() {
curl <http://icanhazip.com>
ip addr | grep inet$IP |
cut -d"/" -f 1 |
grep -v 127\.0 |
grep -v ::1 |
awk '{$1=$1};1'
}
將該函數導入你的 shell:
$ source myfunctions
測試新函數:
$ myip
93.184.216.34
inet 192.168.0.23
inet6 fbd4:e85f:49c:2121:ce12:ef79:0e77:59d1
inet 10.8.42.38
source 的搜索
當你在 Bash 中使用 source
時,它將在當前目錄中搜索你引用的文件。但並非所有 shell 都這樣,因此,如果你不使用 Bash,請查看文檔。
如果 Bash 找不到要執行的文件,它將搜索你的 PATH
。同樣,這並不是所有 shell 的默認設置,因此,如果你不使用 Bash,請查看文檔。
這些都是 Bash 中不錯的便利功能。這種出奇地強大,因為它允許你將常用函數保存在磁碟上的一個集中的位置,然後將你的環境視為集成開發環境 (IDE)。你不必擔心函數的存儲位置,因為你知道它們在你的本地位置等同於在 /usr/include
下,因此無論你在哪,當你導入它們時,Bash 都可以找到它們。
例如,你可以創建一個名為 ~/.local/include
的目錄作為常見函數存儲區,然後將此代碼塊放入 .bashrc
文件中:
for i in $HOME/.local/include/*;
do source $i
done
這會將 ~/.local/include
中所有包含自定義函數的文件「導入」到 shell 環境中。
當你使用 source
或 .
命令時,Bash 是唯一搜索當前目錄和 PATH
的 shell。
將 source 用於開源
使用 source
或 .
來執行文件是影響環境同時保持變更模塊化的一種便捷方法。在下次考慮將大量代碼複製並粘貼到 .bashrc
文件中時,請考慮將相關函數或別名組放入專用文件中,然後使用 source
導入它們。
via: https://opensource.com/article/20/6/bash-source-command
作者:Seth Kenlon 選題:lujun9972 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive