別名如何在主 shell 中可用,但在子 shell 中不可用?

別名如何在主 shell 中可用,但在子 shell 中不可用?

我正在讀一些文字,其中寫道:

.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

相關內容