Shell
如何將函式傳播到子shell?
索拉里斯 / sh
我在一個文件中定義了一些函式,這些函式通過
. ./some_file.sh
當我啟動一個子shell時
sh
我所有的函式定義都失去了,但是當我這樣做時
env
我確實看到了原始碼,有沒有一種簡單的方法可以讓它們在我的子外殼中發揮作用?
函式自然地傳播到子shell:
greet () { echo "hello, $1" } ( echo "this is a subshell"; greet bob )
但它們不是也不能傳播到獨立的 shell 程序,您可以通過呼叫其名稱下的 shell 開始。
Bash 有一個通過 environment 傳遞函式的擴展,但在其他 shell 中沒有這樣的東西。雖然您可以模擬該功能,但無論如何它都需要在嵌套 shell 中執行程式碼。您也可以在嵌套 shell 中獲取函式定義。
您可以將函式從 bash 傳播到 bash子shell:
function greet1 { echo "moin, $1" } typeset -fx greet1 greet2() { echo "servus, $1" } typeset -fx greet2 echo "greet1 bob; greet2 alice" | bash
輸出:
moin, bob servus, alice