回答:
Bashの変数のみに関する場合(質問にはbashというタグが付けられています)、UbuntuのAskの回答が出発点として適しています。
declare組み込みのすべての変数を見ることができます。declare -p環境変数のみに関心がある場合は、使用します
declare -xp実行
help declareして、他のオプションを確認します。
出力にはソースとなる正しい構文が含まれているため、次のソリューションが登場します。
ソースBashセッションで実行
declare -p > ~/some_fileターゲットBashセッションで実行
. ~/some_file 2>/dev/nullノート:
PPID、またはでマークされた変数declare -r)は読み取り専用であり、を使用せずにターゲットセッションで変数を設定しようとした場合、警告はほとんど表示されません2>/dev/null。このリダイレクトは、そのような警告を抑制するためだけにあります。ターゲットセッションで読み取り専用だった変数はそのまま残ります。GROUPSまたはのようなRANDOM特別な変数(詳細man 1 bashについては参照); 私の知る限り、declare -pそれらを異なる方法で処理するため、ターゲットシェルで特別なままになります。ターゲットセッションには存在したがファイルには存在しなかった変数は、そのまま残ります。
ターゲットシェル内の(ほぼ)できるだけ多くの「古い」変数を削除するには、ファイルをソースする前に次のコマンドを使用します。
exec env -i bash --noprofile --norc
これは始まりbashでもない、起動や初期化ファイルを(読み込む--noprofile --norc(空の環境で)env -i)。さらに、新しいプロセスはbash現在のシェル(exec)を置き換えるため、2つのプロセスが不必要にスタックすることはありません(前提は、現在のターゲットシェルはとにかく消耗品であるということです)。
実際、新しいbashコマンドを開始して、1つのコマンドでファイルをソースにすることができます。
exec env -i bash --noprofile --rcfile ~/some_fileそのため、一般的に、ターゲットセッションは正確なレプリカにはなりません。それでも、ソースセッションで手動で設定した変数を転送するだけでよい場合は、この方法で十分です。
2を/dev/null参照しますか?出力を2から/ dev / nullに書き込んでいると推測できますが、各用語が何を指しているのか理解できませんか?説明してもらえますか?
2>/dev/nullは別の主題であり、かなり広い主題です。回答またはコメントは明確な詳細を説明するためのものではないため、元の問題に焦点を当てて回答を続けます。独自の調査を行ってください(ヒント:「シェルリダイレクト」はグーグルを始めるのに良いフレーズです)。その後、まだ不明な点がある場合は、スーパーユーザーに別の質問をしてください。
exec env -i bash --noprofile --norc–(編集済み)回答で説明されています。
iTerm、私が使用しているが...