web-dev-qa-db-ja.com

export PATH = something:$ PATHはどういう意味ですか?

私はLinuxを初めて使用し、ホームフォルダーの下の.profileファイルの最後に次のコマンドを配置します。

export PATH="~/.composer/vendor/bin:$PATH"

私は環境変数とその値の問題をWindowsから少し知っていますが、この場合、このコマンドが何をするのか、そしてそれが何を構成するのかを理解したいと思います:

  1. 最初のこの「エクスポート」フレーズは何ですか? Bashで使用できるようにデータをエクスポートしていますか?

  2. 最初のPATHとは何で、2番目の$PATHとは何ですか。なぜ2つ必要なのですか?

27
JohnDoea

私はここを読んで、ウェブの他の場所でこれについて友人と話し、新人として(おそらくUbuntuの新入生の方で、ここにいる人が思うかもしれません)、このコマンドをマップする必要があると決めました-マップを作成し、したがって、それがどうなっているのか、どこにあるのかを学びます。

予備データ

今のところ、この章で何かを理解していなくても、心配しないで、読み続けるとわかりやすくなりますが、この問題を理解するには、環境変数(EV)、その値、および目的を読む必要があります。私は今、私のような新人のために、そして新人のためだけに、コマンドを簡単な言葉とマッピングの方法で説明しようとします。ここでベストを尽くそうとしました...

マッピング

export PATH="~/.composer/vendor/bin:$PATH"

Ubuntu 15.10に付属するEV「PATH」の元の値は次のとおりです。

/usr/bin:/usr/sbin

コマンド自体に、2つのPATHフレーズがあることに注意してください。最後は$ PATHです-$は「元の値または隣のEVの値を出力します」と表示します。その隣のEVはPATH EVです。

パス変数自体をexported(サブプロセス、CLIで実行されるIEプロセス(実際にはBashシェルではないが、内部で実行します( Drush 、これは Drupal CLIです)。

エクスポートに加えて、それも拡張しました。最初のPATH句(PATH =)は、元の値($ PATHで表される)に追加の値(〜/ .composer/vendor/bin :)を追加するために使用しました。

  • 上記の段落で言及した新しい値の最後のコロン(:)は、新しい値を元の値と区別するために使用します。

  • 「」は、値が存在する領域です。

  • 〜はホームフォルダーです。


私がこのマッピングを行った後、私のような新入生にとってコマンドがより明確になることを願っています。

2
JohnDoea

最初のこの「エクスポート」フレーズは何ですか?

exportはコマンドです(より正確には Bash組み込み です。つまり、PATHに存在する実行可能ファイルではありません。Bash自体に組み込まれているコマンドです)。

Bashで使用できるようにデータをエクスポートしていますか?

exportは、割り当ての左側の環境変数を割り当ての右側の値に設定します。そのような環境変数は、それを設定するプロセスと同じ環境で生成されたすべてのサブプロセス、つまりこの場合~/.profileをソースとするBashインスタンスと同じ環境で生成されたすべてのサブプロセスに表示されます。たとえば、他のシェルも含めて、それらにアクセスできるようにします)。

最初のPATHとは何で、2番目の$PATHとは何ですか。なぜ2つ必要なのですか?

上記の最初のPATHは、exportを使用して設定する環境変数です。

PATHは通常~/.profileがソースになったときに何かを含むため(デフォルトでは/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/gamesを含む)、単にPATH~/.composer/vendor/binに設定するとPATHが含まれます~/.composer/vendor/binのみ。

コマンド内の変数への参照は、コマンドの評価時にBashによって変数の値に置き換えられる(または「拡張」される) であるため、:$PATHPATHに割り当てられる値は、PATH~/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/gamesを含むようになります(つまり、PATHには既に~/.composer/vendor/bin:が含まれています)。

39
kos

https://help.ubuntu.com/community/EnvironmentVariables はおそらく役立つでしょう。また、man bashは、それがどのように機能するかを理解するのに非常に役立ちます(少なくともBashでは)

とにかくPATH=に関しては、基本的にPATH変数を設定し、いくつかの新しいパスを検索に追加し、$PATH(基本的にはPATH変数への参照)。

したがって、PATHはこれまでのところ次のように設定されていたとします。

PATH="x:y:z"

そして、あなたは設定します

PATH="a:b:c:$PATH"

あなたのPATHは次のようになります:

a:b:c:x:y:z

それが理にかなっていることを願っています。

さらに、新しい変数をエクスポートして、環境内で子プロセス/サブシェルも含むようにします。

PATHで設定されているディレクトリの順序が重要になる場合があることにも注意してください。そして、PATH="$PATH:a:b:c"のようなものはあなたに結果を与えます:

x:y:z:a:b:c

コマンドを検索する際のディレクトリ/パスの順序に影響します(複数のディレクトリにコマンドがある場合、最初に見つかったものが使用されます-予期しない結果が得られる場合があります)。

16
Jacek

ここにコマンドがありますので、誰もが弾丸のポイントを通り抜けることができます。 export PATH="~/.composer/vendor/bin:$PATH"

  • export Shellビルトイン(/bin/exportがないことを意味する)コマンドは、基本的にbashから呼び出される他のプログラムで環境変数を利用できるようにします(Extra Readingのリンクされた質問を参照)およびサブシェル。
  • シェルでの割り当ては最初に展開され、次に割り当てが行われます。したがって、二重引用符の中にあるものは最初に展開され、後でPATH変数に保存されます。
  • $PATHはデフォルトのPATH割り当て(または、少なくともこのコマンドが.bashrcまたは.profileに表示されるまでの変数の外観)であり、展開します。
  • ~/.composer/vendor/bin/home/username/.composer/vendor/binに展開されます。ここで、.composerは先頭のドットのために隠しフォルダーです。
  • その短い~/.composer/vendor/bin:$PATHは、:で区切られたフォルダーの長いリストに変換されました。パスにスペースを含むフォルダーを含めるために、すべてを二重引用符で囲みます。
  • 最後に、すべてがPATH変数に格納され、それを使用できる外部コマンドが許可されます

簡単な例

私の対話型シェルは、実際にはmkshで、たまたまexportも組み込まれています。 exportを使用してVARを設定することにより、同じ変数をエクスポートしたコマンド/サブプロセスの後続のチェーンに変数を渡して使用できます。

$ echo $Shell            
/bin/mksh
$ VAR="HelloAskUbuntu"
$ bash -c 'echo $VAR' 
$ export VAR="HelloAskUbuntu"                                                  
$ bash -c 'echo $VAR'                                                          
HelloAskUbuntu
$ 

余分な読み取り値

2

exportコマンドは、変数をサブシェルで使用可能にします。つまり、それなしでは、変数PATHはサブシェルでは表示されません。

PATHは2回言及されています。

  • =記号の左側の変数に値が割り当てられています。
  • =記号の右側の値で置き換えられる変数名として。これにより、古い値が新しい値の一部になります。
1
rexkogitans
export PATH="~/.composer/vendor/bin:$PATH"
  1. exportはbashの組み込みコマンドであり、環境変数となるエクスポート変数を意味します。 (help exportと入力すると、さらに学習できます

    (コマンドに続く文字はスペースで分割されたパラメーターメーターです。この場合、パラメーターは1つだけです)

  2. PATHは変数名であり、通常、bashによって事前定義された変数で、大文字で命名されます。

  3. =は、この変数に値を割り当てることを意味します。

  4. すべての文字列は、変数の値です

  5. $PATHvariable expantionという名前のbashの一種であり、bashはパラメーター文字列のPATHの存在する値を置き換え、文字列をexportコマンドに送信する前に

  6. pATH変数のspcial charの:であり、この変数を使用するすべてのアプリケーションによって理解されます。セパレーターを意味します。そのため、PATH変数に多くのディレクトリがあります。

0
lovespring