サブシェルに機能を伝播する方法は?

サブシェルに機能を伝播する方法は?

ソラリス/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

関連情報