web-dev-qa-db-ja.com

Linux環境変数の設定

Red Hat Linux Enterprise5を実行しています。私は常にexportコマンドを使用して環境変数を設定しています。

環境変数を設定する他の方法はありますか?それらの長所/短所は何ですか?

9
George2

これは、Bashのmanページからの抜粋です。

エクスポート[-fn] [名前[=単語]].。
export -p
指定された名前は、後で実行されるコマンドの環境に自動的にエクスポートされるようにマークされています。 -fオプションを指定すると、名前は関数を参照します。

現在の環境で変数のみが必要な場合は、エクスポートを使用する必要はありません。

var=value

編集:

エクスポートなし:現在の環境のみ。エクスポートあり:現在の環境と子環境。

これは、子環境での変数の可用性に対するエクスポートの影響と、子環境での変更が親に影響を与えないことのデモンストレーションです。

$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []

現在の環境ではecho "parent..."var1の両方がアクティブであるため、最初のエコー(var2)の後に「123」と「456」が表示されます。 var3の値はまだ設定されていないため、表示されません。

var3=...」で始まる行の後には、エクスポートされていないため、var1の値は表示されません。 dovar2の値が表示されます。これは、wasエクスポートされたためです。 var3は子環境用に設定されているため、値が表示されますonly

bash -cは、-cオプションの引数の内容を使用してスクリプトを実行することと同じです。スクリプトまたはその他の実行可能ファイル、またはこの場合、bash -cの引数はの子になります。結果として、もちろん子供の親である現在の環境。)

「スクリプト」では、変数の値が変更されます。これらの新しい値を出力するようになりました。

「スクリプト」が終了すると、実行は親環境(この場合はコマンドライン)に戻ります。最後のエコーの後、子環境で行われた変更は親に影響を与えないため、元の値が表示されます。

あなたはそれを言う

私は常にexportコマンドを使用して環境変数を設定しています

ちなみに、環境変数をどうやって持続させるのか、本当に問いかけているようですね。これを行うには、export VAR="foo"ステートメントを$ HOME/.bash_profileファイルに配置する必要があります(bashを使用している場合)。その環境変数をroot以外のすべてのユーザーに対して永続化する場合は、それを/ etc/profileに追加します。 rootユーザーにも追加したい場合は、/ root /.bash_profileに設定します。

これは、bashが選択されたシェルであるすべてのログインシェルで機能します。ログインシェル以外の場合は、.bashrcを使用する必要があります。他のシェルに提供する洞察はありません:D

3
whaley

エクスポートはそれを行うための最も簡単な方法です、それでなぜそれをそのままにしておかないのですか?

export VARIABLE=value    # for Bourne, bash, and similar shells
setenv VARIABLE value    # for csh and similar shells
1
BloodPhilia

次のようなこともできます。

VAR=val application

例えば:

LANG=C ls --help

英語で出力します。

LANG=pl_PL ls --help

ポーランド語での出力(利用可能な場合)。

過去のshでは、VAL = valをエクスポートすることはできませんでした。あなたがしなければなりませんでした

VAL=val; export VAL
1
gogiel