'export'コマンドは何をしますか?


85

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

最近Jenkinsで作業を開始し、このexportコマンドを使用してJenkins戦争アーカイブを実行する必要がありました。そのためexport、一般的にコマンドが何をするのか、そしてJenkinsの実行中に(Jenkinsホームが設定された後に)このコマンドを実行する必要がある理由を知る必要がありました。

ありがとう!


1
使用したエクスポートコマンドについて詳しく説明すると役立ちます。これ以上のコンテキストがなければ、環境変数を設定していると思います。en.wikipedia.org/wiki/Environment_variable#Unix
Joshua D. Boyd


回答:


99

exportinshおよび関連するシェル(などbash)は、子プロセスにエクスポートされる環境変数をマークして、子がそれらを継承するようにします。

exportPOSIXで定義されています:

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


どうもありがとう!あなたの答えはすべて本当に役に立ちました、そして彼らはさらにいくつかのことを学ぶためのガイドです!:-)
Chathura Kulasinghe 2012

1
この意味での子プロセスとは何ですか?
Zinan Xing

13
わからない
Martin Hansen

@MartinHansen何がわかりませんか?また、私の答えを参照してください。
barlop 2016

リンクの最後に余分な角括弧があります。これは1つの記号であるため、編集できません:)
Radoslav Stoyanov 2017年

27

私はあなたが窓の背景から来ていると思います。だから私はそれらを対比します(私も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を使用します。たとえば、set a = 5ですが、Linuxは使用しません。

Linuxでは、私は、例えば、あなたが起動時にセット変数というスクリプトを作ることができると思います/etc/profileか、/etc/.bashrcそうでなければ、彼らは永久的ではないです。それらはRAMに保存されます。

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

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

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

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

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

環境変数はexportで設定され、exportはシェル変数も設定します

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

ここでは、yyyがexportで設定されているので、これは環境変数です。そして、シェル変数と環境変数の両方の下に表示されていることを確認してください

$ zzz=5

$ set | grep zzz
zzz=5

$ env | grep zzz

$ export yyy=5

$ set | grep yyy
yyy=5

$ env | grep yyy
yyy=5

$

他の便利なスレッド

/unix/176001/how-can-i-list-all-shell-variables

/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference

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


setはシェルと環境を示し、「env」は環境のみを示しているように見えます
barlop 2015

1
最初は混乱する可能性のあるnixとwinのケースをカバーしているため、この回答が非常に好きです。
n0thing 2016

6

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


1
しかし、私が言うとa=5echo $aそれは5と言います。それでも、「変数値のいずれかを変更すると、シェルはその変更を選択する方法がありません。つまり、行った変更が新しいシェルセッションで有効になる」と書いています。 。<-では、エクスポートせずにシェルセッションをどのように更新したのでしょうか。輸出が必要な例を挙げていただけますか?
barlop 2015年

シェルセッション中に設定する変数はシェル変数です。ローカルで、現在のシェルセッションにアクセスできます。いつでも変更でき、変更をエクスポートしなくても、現在のシェルプロセスで現在の値を使用できます。一方、環境変数はログイン時に設定されます。それらの値のいずれかを変更するときは、簡単に言えば、現在のシェルプロセスと新しい子プロセスの両方で新しい値を使用できるようにする更新を実行する必要があります。それはまさにエクスポートが行うことです。
katwekibs 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.