%20%E4%B8%AD%E5%AE%9A%E7%BE%A9%E8%85%B3%E6%9C%AC%E4%B8%AD%E5%8F%AF%E7%94%A8%E7%9A%84%E5%85%A8%E5%9F%9F%E5%87%BD%E6%95%B8%EF%BC%9F%20.png)
自 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 中工作?