evalで定義された関数をエクスポートするには?

evalで定義された関数をエクスポートするには?

コマンドラインから実行して動的関数を定義します。

eval "ab() { echo test; }"

テストを実行して印刷します。

同じ文をスクリプトに入れて、test.shスクリプトを実行します。何もしません。関数が定義されていません。

関数がスクリプトの外部ではなく内部で定義されているためです。だからスクリプトを追加してみました。

export -f ab

しかし、これはうまくいきません。スクリプトからシェルに関数をエクスポートする方法は?

答え1

関数または変数を親シェルにエクスポートすることはできず、スクリプトを実行しているシェルまたはサブシェルにのみエクスポートできます。

現在のシェル環境を変更するスクリプトの場合は、sourceスクリプトを使用または実行する必要があります.。たとえば、./myscript.sh実行する代わりに. ./myscript.sh

これは、スクリプトを実行するためにサブシェルを作成するのではなく、現在のシェル自体がスクリプトを実行していることを示します。したがって、スクリプトは現在の環境を変更できます。

関連情報