Shell

如何將函式傳播到子shell?

  • August 1, 2017

索拉里斯 / 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

另外,請參閱https://docstore.mik.ua/orelly/unix3/upt/ch29_13.htm

引用自:https://unix.stackexchange.com/questions/65751