我正在讀一些文字,其中寫道:
.bashrc shell 設定檔實際上是在每次產生 BASH shell 時執行的,例如執行 shell 腳本時。換句話說,每次創建子shell時,都會執行.bashrc檔。這會導出您在 .bashrc shell 初始化檔案中定義的任何局部變數或別名。
我還讀到,每次執行 shell 腳本時(例如腳本1.sh),創建了一個子shell。所以當這個子shell被創建時,.bashrc檔案必須執行,因此別名定義在.bashrc必須在子 shell 中可用(但在子 shell 中不可用)。如果別名在此子 shell 中不可用,那麼它們如何在主 shell 中可用(透過它我執行我的腳本)?
答案1
是的,在 Linux 的 bash shell 中你可以說
source /path/to/my_lib.sh
用於從檔案載入別名定義。或者,為了降低複雜性,您可以簡單地將別名定義複製到 bash 腳本中。
可是等等!這只會創建別名,可能是
alias foo3 foo9 # describe these two aliases: declare errors if one doesn't exist
您將享受新的別名定義,但在啟用別名擴充功能之前運行它們將會失敗:
shopt -s expand_aliases # alias xpn ON
還請考慮:
shopt -u expand_aliases # alias xpn OFF
或者
shopt expand_aliases # query whether
或者
unalias foo3 foo9 # delete these aliases
答案2
如果您已定義別名script1.sh
並且希望它們在任何地方都可用,請新增到您的.bashrc
檔案中:
source /path/to/script1.sh
或者:
. /path/to/script1.sh
為了避免腳本不存在時出現錯誤,您可以使用:
if [ -f /path/to/script1.sh ]; then source /path/to/script1.sh; fi
這同樣適用於您在 中定義的任何函數script1.sh
。