如何在 zsh (macOS) 中定義腳本中可用的全域函數?

如何在 zsh (macOS) 中定義腳本中可用的全域函數?

自 macOS 10.15 (Catalina) 起,預設 shell 已從 bash 變更為 zsh。我遇到的事情之一是我無法讓自己的全域函數正常工作。我曾經從 .bash_profile 導出這些,但 zsh 似乎不知道導出函數的概念。

假設我有這個:

function greet { echo "Hello $1, how are you today" }

如果我隨後hello RocketNuts在 shell 上運行,它會顯示Hello RocketNuts, how are you today.到目前為止,一切都很好。

現在我想讓這個函數全域化這樣它也可以在腳本中使用

我努力了:

  • 把它放進去.zshrc
  • 把它放進去.zshenv

我還嘗試創建一個子目錄~/myfunctions和一個名為的文件~/myfunctions/greet,其中包含:

function greet { echo "Hello $1, how are you today" }
greet "$@"

然後在其中一個~/.zshrc~/.zshenv我添加:

fpath=( ~/myfunctions "${fpath[@]}" )
autoload -Uz greet

但是,這些方法都沒有使該greet函數在腳本中可用。

從外殼來看,它們都運作正常。無論使用哪種方法,我都可以greet在 shell 上手動呼叫該函數。

test.sh但是,如果我有一個執行該操作並運行該文件的文件greet Somebody,它總是顯示“問候:找不到命令”。

我如何讓它在 zsh 中工作?

相關內容