2012-12-10 4 views
69

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

最近私はジェンキンと仕事を始めました。そして、このエクスポートコマンドを使用してジェンキンス戦争アーカイブを実行しなければなりませんでした。したがって、の「エクスポート」コマンドが一般的に何をしているのか、なぜジーンキンを実行している間にこのコマンドを実行する必要があるのか​​を知る必要がありました。

ありがとうございます!

sh
+1

これは、使用したエクスポートコマンドの詳細について述べた場合に役立ちます。コンテキストがなければ、環境変数を設定していたと思います。 http://en.wikipedia.org/wiki/Environment_variable#Unix –

+4

を参照してください。[bash:エクスポートの有無にかかわらず変数を定義する](http://stackoverflow.com/questions/1158091/bash-defining-a-変数付き、またはエクスポートなし) – tripleee

+0

[unix exportコマンド]の重複可能性(http://stackoverflow.com/questions/7328223/unix-export-command) –

答えて

87

exportと(例えばbashなど)に関連するシェルは、子供がそれを継承するようは、子供のプロセスにをエクスポートする環境変数をマークします。

export is defined in POSIX

シェルは、彼らがその後に実行されるコマンドの環境にあることが原因となるものと指定された名前に対応する変数へのエクスポート属性をしなければなりません。変数の名前の後に= wordが続く場合、その変数の値はwordに設定されます。

+0

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

+0

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

+6

分かりません –

2

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

+1

しかし、私が 'a = 5'と言うと' echo $ a'と言うと5と表示されます。しかし、あなたは "いつでも可変値のいずれかを変更すると、シェルはその変更を選択することができません。つまり、変更が新しいシェルセッションで有効になることを意味します。" < - エクスポートせずにシェルセッションをどのように更新しましたか?輸出が必要な場合の例を挙げることができますか? – barlop

+0

シェルセッション中に設定する変数はシェル変数です。現在のシェルセッションでローカルでアクセス可能です。必要に応じていつでも変更することができ、変更をエクスポートせずに現在のシェルプロセスで現在の値を使用できるようになります。環境変数はログイン時に設定されます。それらの値を変更するときは、単純に現在のシェルプロセスと新しい子プロセスの両方で新しい値を使用できるようにリフレッシュするものを実行する必要があります。まさに輸出が何をしているのか。 – katwekibs

18

あなたはWindowsの背景から来ていると思います。ですから、私はそれらを対照します(私はLinuxにはまったく新しいです)。私は自分のコメントにユーザーの返答を見つけたので、物事を理解するのに便利です。

Windowsでは、変数は永続的であってもなくてもかまいません。環境変数という用語には、SETコマンドを使用してcmdシェルに設定された変数と、Windows GUI内で変数が設定されてレジストリに設定され、新しいcmdウィンドウで表示可能になる変数が含まれます。例えば "環境変数を表示、設定、または削除します。パラメータなしで使用すると、setは現在の環境設定を表示します。 Linuxでは、setは環境変数を表示せず、呼び出さない/シェル変数を環境変数として表示します。また、Linuxは変数を設定するために(私が最後にメモとして説明する位置パラメータとシェルオプションを除いて)変数を設定するのではなく、それらを表示するだけで、シェル変数を表示するだけです。 Windowsは例えば設定および表示のためにセットを使用する。 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のセットが設定できるもう一つのものはシェルオプション/属性です。 -oを設定すると、それらのリストが表示されます。例えば、set -o verboseをオフにすると、詳細をオンにすることができます(デフォルトはオフになっていますが、これには違いはありません)。または、詳細表示をオフにするにはset +o verboseを実行します。 Windowsはそのsetコマンドにそのような使用法はありません。

+0

はシェルと環境を表示しているように見えますが、 'env'は環境のみを表示します – barlop

+1

これは最初から紛らわしいnix vs winのケースをカバーしているので、 – N0thing

関連する問題