デフォルトのPIDに関連するグローバル変数などのシェル間で環境変数を共有する方法は?

デフォルトのPIDに関連するグローバル変数などのシェル間で環境変数を共有する方法は?

したがって、シェル間で環境変数を共有し、グローバル変数と同様に、すべてのシェルが変数の変更をすぐに認識できるようにする必要があります。ただし、マスターPIDに関連付ける必要があるため、2つのシェルスクリプトを実行できます。それぞれは同じグローバル変数名を持つマスターであり、その子孫はマスターPIDに関連する変数のみを変更します。

bashスクリプトの作成に使用します。

現在の研究には以下が含まれます。

基準寸法
モジュールプロジェクトを使用してこれを達成できることを読んだ。http://modules.sourceforge.net/ところで、こうやろうとするのに悩みが多すぎて例が不足しているようですね。そして、「モジュール」はあまりにも一般的な単語なので、他の単語と混ざりすぎてグーグルするのは難しいです...数週間後も私の手はまだ空です。

単純なテキストソースファイル
flockまた、同時書き込みを防ぐために、変数を保存/更新/読み取るためのソーススクリプトファイルとして単純なテキストファイルを使用する必要があることも読みました。ただし、これを行うと、2つのシェルが同時に変数を変更するなど、いくつかの問題が発生する可能性があります。

または
シェルが「グローバル」変数を読み取った後、他のシェルがそれを読み取るまで値を保持することを知っています。その間、他のシェルもこれを変更できます。
おそらく、非常に高速な外部アプリケーションがこれらのストレージスペースを提供できます。環境変数をグローバル変数として使用しようとしていませんか?しかし、私の考えでは、SQLソリューションが遅すぎると思います...

ベストアンサー1

(include コマンド) を使用すると、環境をファイルに書き込んで、別のインスタンスからexport -p定期的に再読み込みできます..しかし、ご存知のように、同時修正があれば結果は良くありません。

変更をすぐに伝播するには、変更exportを他のシェルに伝播する組み込み関数の周りにラッパーを使用する必要があります。 Linuxではこのユーティリティを使用できますflock

global_export () {
  {
    flock 0
    . /path/to/env
    [ $# -eq 0 ] || export "$@"
    export -p >/path/to/env
  } </path/to/env
}

global_exportエクスポートした変数に新しい値を割り当てるたびに、この呼び出しを呼び出す必要があります。

これはかなり不器用なことだ。おそらく問題を解決するより良い方法があります。最も明白な方法は、これらの環境変数を使用するコマンドに設定ファイルを読み取ることです。

おすすめ記事