回答:
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
、私が使用しているが...