web-dev-qa-db-ja.com

「エクスポート」コマンドは何をしますか?

私はLinuxに少し慣れていないので、物事を成し遂げるために盲目的にいくつかのコマンドを実行します。より多くの新しい人々がそれらについての定期的な知識を持っているので、私はそれがこれらのタイプの質問をすることの無駄ではないと思った。

Jenkins で作業を始めた後、このexportコマンドを使用して Jenkins war archive を実行する必要がありました。したがって、exportコマンドの一般的な動作と、Jenkinsの実行中(Jenkinsホームの設定後)にこのコマンドを実行する必要がある理由を知る必要がありました。

ありがとう!

81

exportおよび関連するシェル(shなど)のbashは、環境変数をexportedにマークします子プロセスが子プロセスを継承するようにします。

exportはPOSIXで定義されています

シェルは、指定された名前に対応する変数にエクスポート属性を与えます。これにより、それらの変数は、その後実行されるコマンドの環境に置かれます。変数の名前の後に= Wordが続く場合、その変数の値はWordに設定されます。

98
Yann Ramin

私はあなたが窓の背景から来ていると思います。だから私はそれらを対比します(私もLinuxに新しいです)。物事を理解するのに役立つ、ユーザーのコメントへの返信が見つかりました。

Windowsでは、変数は永続的である場合とそうでない場合があります。環境変数という用語には、SETコマンドを使用してcmdシェルで設定された変数、および変数がWindows GUI内で設定され、レジストリに設定され、新しいcmdウィンドウで表示可能になるときが含まれます。例えばWindowsのsetコマンドのドキュメント https://technet.Microsoft.com/en-us/library/bb490998.aspx "環境変数を表示、設定、または削除します。パラメータなしで使用すると、setは現在の環境設定。」 Linuxでは、setは環境変数を表示せず、環境変数として呼び出したり参照したりしないシェル変数を表示します。また、Linuxは変数を設定するためにsetを使用せず(位置パラメーターとシェルオプションは別として、最後にメモとして説明します)、それらを表示するためだけでなく、シェル変数を表示するためにも使用します。 Windowsでは、たとえばsetを使用して設定および表示を行います。 a = 5に設定すると、Linuxは設定しません。

Linuxでは、起動時に変数を設定するスクリプトを作成できると思います。 /etc/profileまたは/etc/.bashrcですが、それ以外の場合は永続的ではありません。それらはRAMに保存されます。

Linuxでは、シェル変数と環境変数に違いがあります。 Linuxでは、シェル変数は現在のシェルにのみ存在し、環境変数はそのシェルとすべての子シェルに存在します。

シェル変数はsetコマンドで表示できます(ウィンドウとは異なり、変数はLinuxでsetコマンドを使用して設定されないことに注意してください)。

set -o posix; set(最初に一度-o posixを設定すると、不要なものがあまり表示されなくなります)。したがって、setはシェル変数を表示します。

envコマンドで環境変数を表示できます

シェル変数は、たとえばただa = 5

環境変数はエクスポートで設定され、エクスポートはシェル変数も設定します

ここでは、zzz = 5で設定されたシェル変数zzzが表示され、setを実行すると表示されますが、環境変数として表示されません。

ここでは、yyyがエクスポートで設定されているので、環境変数です。そして、シェル変数と環境変数の両方の下に表示されるのを見てください

$ zzz=5

$ set | grep zzz
zzz=5

$ env | grep zzz

$ export yyy=5

$ set | grep yyy
yyy=5

$ env | grep yyy
yyy=5

$

他の有用なスレッド

https://unix.stackexchange.com/questions/176001/how-can-i-list-all-Shell-variables

https://askubuntu.com/questions/26318/environment-variable-vs-Shell-variable-whats-the-difference

注-少し詳しく説明し、私が書いたことに対して多少修正がある点は、Linux bashでは、「set」を使用して「位置パラメータ」と「シェルオプション/属性」、および技術的には両方のこれらは変数ですが、マニュアルページではそのように説明されていない場合があります。ただし、前述のように、setはシェル変数または環境変数を設定しません)。 set asdfを実行すると、$ 1がasdfに設定され、echo $1を実行するとasdfが表示されます。 set a=5を実行すると、変数aは5に設定されません。位置パラメーター$ 1が「a = 5」の文字列に設定されます。したがって、Linuxでa = 5を設定したことがある場合、誰かが実際に$ 1のa = 5という文字列を望んでいない限り、おそらく間違いです。 Linuxのセットで設定できるもう1つのことは、シェルのオプション/属性です。 -oを設定すると、それらのリストが表示されます。そして、例えばset -o verbose、offを実行して、冗長をオンにすることができます(デフォルトはオフですが、これには違いはありません)。または、set +o verboseを実行して、詳細をオフにすることができます。 Windowsでは、setコマンドにそのような使用法はありません。

25
barlop

簡単に言えば、新しいシェルセッションを開くと、環境変数が設定されます。変数値のいずれかを変更した場合、シェルにはその変更を選択する方法がありません。つまり、行った変更は新しいシェルセッションで有効になります。一方、exportコマンドは、エクスポートされた変数に加えた変更に関して現在のシェルセッションを更新する機能を提供します。変更した変数の値を使用するために、新しいシェルセッションまで待つ必要はありません。

5
katwekibs