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