「リターン」exec呼び出しを行うことはできますか?

「リターン」exec呼び出しを行うことはできますか?

現在のプロセスイメージを完全に置き換える代わりに、execシステムコールを関数呼び出しのように返す方法はありますか?私の動機は、互換性のない言語を使用する2つのシェルを統合することでした。アイデアは、シェルAがシェルBの言語で書かれたスクリプトを実行することができ、シェルBのスクリプトによって、環境変数、作業ディレクトリなどへの変更を維持できることです。

これまで私が考えることができるすべてのソリューションにはいくつかの大きな制限があります。

最初の解決策は、シェルAがシェルBとして実行され、次にシェルBがシェルAとして再実行されるようにすることです。私は以前このような質問をしたことがあります。。問題は、現在実行中のスクリプトの場所、ローカル変数、エイリアスなどの初期シェルAプロセスのすべての状態を削除することです。

2番目の解決策は、シェルAにフォーク実行を使用してシェルBを従来のサブプロセスとして実行させ、シェルBがその環境をシリアル化してから終了する前にシェルAプロセスに戻すようにすることです。これの2つの利点は、親プロセスの状態を保存し、必要に応じて関数やエイリアスなどのアプリケーションレベルのデータをシリアル化することもできることです。問題は多くのこと子プロセスは親プロセスから継承されるため、それらの1つを直列化することを忘れないようにすることは困難です。

ベストアンサー1

おすすめ記事