ソラリス/sh
以下を介してロードされるファイルにいくつかの機能が定義されています。
. ./some_file.sh
サブシェルを起動するとき
sh
私の関数定義はすべて失われましたが、そうすれば
env
ソースコードを見ました。私のサブシェルで動作させる簡単な方法はありますか?
答え1
関数は自然に次に伝播されます。サブシェル:
greet () {
echo "hello, $1"
}
( echo "this is a subshell"; greet bob )
ただし、名前でシェルを呼び出すことによって開始される独立したシェルプロセスには伝播されず、伝播することもできません。
Bashには、環境を介して機能を渡す拡張機能があります。しかし、他のシェルにはそのようなものはありません。この機能をシミュレートできますが、とにかくネストされたシェルでコードを実行する必要があります。ネストされたシェルから関数定義を取得することもできます。
答え2
機能を伝播できます。バッシュからバッシュまでサブシェル:
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