
Linux bash ターミナルでは、$PATH
や のように、多くの環境変数が設定されていることがよくあります$HOME
。
設定されているすべての環境変数を確認することは可能ですか? 方法は?
答え1
要約:使用(set -o posix ; set)
Bashのマニュアルによれば、set
組み込みコマンドを使用してすべての環境変数を表示します設定されているものが表示されます。set
コマンドは関数の定義も表示します。関数ではなく変数だけを表示したい場合は、set コマンドを実行する前に POSIX モードをオンにすることができます。これを行う最も簡単な方法は を使用することですset -o posix
が、 でオフにするまで POSIX モードはオンのままになりますset +o posix
。
したがって、次のコマンドは、現在のシェルの POSIX 準拠に影響を与えることなく、サブシェルを使用して定義されたすべての環境変数を表示します。
(set -o posix ; set)
@RedGrittyBrick と @iglvzx はenv
コマンドの使用を提案しましたが、このコマンドでは環境変数の完全なリストは提供されません。 はエクスポート対象としてマークされた変数のみを表示します。とenv
の出力を比較すると、私の言っていることがわかるでしょう。エクスポートされていない環境変数を確認するには、を実行できます。env | sort
export -p
comm -23 <(set -o posix; set) <(env|sort)
この矛盾の理由は、 がenv
別個の実行ファイルであるのに対し、 がset
シェルの組み込みコマンドであるからです。Bashのマニュアルによると、シェルの組み込みコマンドまたは関数ではないコマンドが実行されると、Bashでエクスポート用にマークされた環境変数のみが受信されます。エクスポートされない変数が多数あります。したがって、シェルで定義されているすべての変数を確認するには、set
マニュアルに記載されているコマンドを使用する必要があります。
次のコマンドを使用して、この動作を自分で簡単にテストできます。
MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE
set
は出力を提供しますが、は出力を提供しないことがわかりますenv
。
答え2
引数のないコマンドenv
は、「エクスポートされた」環境変数とその値のリストを出力します。これらの変数はサブプロセスで表示されます。他の多くの環境変数はこれと一緒には表示されず、実行中のシェル内でのみ使用されます (構成など)。
答え3
compgen -v
シェル変数を出力します (ただし値は出力しません)。
compgen -e
エクスポートされた変数、つまりこのシェルが開始するプロセスによって継承される変数 (ただしその値は出力しません) を出力します。
シェル変数とエクスポート変数の違い:https://unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1
答え4
これまでの回答のいくつかを組み合わせると、次のことが役立つと思います。
compgen -v | sort | while read var; do [ -z "${!var}" ] || echo $var=${!var} ; done
compgen -v
: ローカルまたはエクスポートされたすべての変数名を出力します。sort
: アルファベット順。${!var}
: $var の値を取得します (変数間接参照)。-z
条件: 値が null かどうかを確認し、そうでない場合は「variable=value」を出力します。
注:
printenv
も優れていますが、ローカル/bash 変数ではなく、エクスポートされた環境変数のリストのみが表示されます。