Mac OSのPATHとは何ですか?


12

PATHMac OSには何がありますか?私はそれを使用してグローバルコマンドラインツールをインストールしましたが、見つかった唯一のドキュメントはそれを実行するためのチュートリアルであり、内部で何が起こっているのかについての実際の説明はありません。ウィキペディアに関連するページも見つかりませんでした。

では、目的PATHとは何ですか?/etc/paths~/.bash_profile**の違いは何ですか?

たとえば、私のpathsファイルでは、次のようになっています。

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

しかし、私のでは~/.bash_profile、これがわかります:

# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH

これはpathsファイルへのユーザー固有の追加ですか?のpathsようなものは何/usr/binですか?


2
1つの投稿に複数の質問を組み合わせないでください。あなたの質問のそれぞれは、ここでは別々に歓迎されますが、このようにすべて一緒にではありません。これを1つの質問に切り詰めてください。1と2を組み合わせることができますが、他の質問はPATHとは特に関係ありません。3はここで答えられます 4はここで説明さ、5はあまり意味がありません。あなたのボーナス質問もしません、どのファイルがバイナリですか?スクリプトはそうではありません。
terdon

質問を編集しました。また、これらのリンクは役に立ちました。ありがとう。
gwg 2014年

回答:


15

1. PATHの目的は何ですか?

PATHある環境変数シェルは、あなたが(あなたのようにそれらへの明示的なパスを設けることなく、コマンドラインに名前を付けることの実行可能ファイルを探しますコロン区切りのディレクトリリストに含まれているjsdoc例が)。したがって、あなたPATHが持っている場合

/usr/bin:/bin:/home/bin

次に、名前で呼び出す実行可能ファイルがこれらのディレクトリで(この順序で)検索され、最初に見つかった実行可能ファイルが実行されます。

2. / etc / pathsと〜/ .bash_profileの違いは何ですか

ServerFaultに関するこの質問によると、/etc/pathsPATHグローバルに(つまり、システム全体ですべてのユーザーに対して)~/.bash_profile設定するために使用され、ユーザーごとの設定(~ユーザーのホームディレクトリ)を設定するために使用されます。書き込まれたものは.bash_profile、グローバルPATHから追加することも、/etc/paths完全に上書きすることもできます。

記録として/etc/pathsは、MAC OSの特異性のようです。少なくとも、GNU / Linuxではこれに遭遇していません。


私はそれらを編集しましたが、それらすべてに答えてくれてありがとう!
gwg 2014年

@ggundersen編集した質問に合わせて回答をトリミングしました。
ジョセフR.

@ggundersenあなたは私の答え/etc/pathsOSX に関するリンクを読むこともできます。
terdon

7

PATHの目的は何ですか?

それはあなたのシェルがプログラムを見つける方法です。あなたが入力するとls、例えば、呼ばれるプログラム実行しているlsに住んでいる/binのMac OS Xを含む、ほとんどのシステムではあなたのシェルは、理由だけでは見つけることができるということ/binですPATH

シェルはプログラムをPATH左から右の順に検索します。lsシステムに2つのプログラムがあり、それらのディレクトリが両方ともにあるPATH場合は、の最初にリストされているディレクトリにあるプログラムが見つかりますPATH

/ etc / pathsと〜/ .bash_profileの違いは何ですか

設定されたパスは、Mac OS Xのすべてのシェルで起動時に/etc/paths追加されPATHます。

~/.bash_profileは起動時にBashによって実行されるいくつかのシェルスクリプトの1つにすぎず、これらのいくつかはBash固有のものです。したがって、シェルを変更するtcshzsh、Mac OS Xも出荷され、たとえば、変更は/etc/bashrc新しいシェルには適用されません。

また、ユーザーごとの/etc/pathsシステムレベルの構成ファイルです~/.bash_profile。Macに複数のインタラクティブユーザーを設定して/etc/pathsいる場合、全員に表示したくないディレクトリにディレクトリを追加する必要はありませんPATH。同じことがにも当てはまりますが/etc/bashrc、Bashをシェルとして使用するユーザーにのみ適用されます。

PATHと$ PATHと$ {PATH}の違いは何ですか?

変数を設定しているときは、通常、シギルなしで変数が表示されます。環境変数を文字列にFOO=bar設定しFOOますbar。と入力するsetと、シェルはすべての環境変数を表示します。その場合、シギルなしの変数も表示されます。

$PATHそして${PATH}、通常は交換可能です。現在のPATH変数の値をインプレースで展開するようにシェルに指示します。違いは、それらをどのように、どこで使用するかに関係しています。例えば:

$ FOO=bar
$ echo $FOO
bar
$ echo $FOOx

$ echo ${FOO}x
barx

2番目のechoコマンドでは、シェルFOOxは存在しないと呼ばれる変数を出力するようにシェルに要求するため、何も出力しません。シェルは存在しない変数を空として扱います。3番目echoは中括弧の構文を使用しているため、FOO変数を要求していること、およびx直後に出力したい別の文字であることをシェルが確認できます。

ちなみに、中括弧なしで同じ効果を得る別の方法があります。

$ echo "$FOO"x
barx

環境変数は二重引用符で展開され、引用符xは変数の展開からを分離するので、シェルは正しいことを行います。

FOOここでは、わかりやすくするために環境変数を使用しています。上で書いたものはすべて、にも適用されPATHます。これは、単なる別の環境変数だからです。例のテキストは、はるかに長くなります。

PATHのエクスポートとはどういう意味ですか?いつ輸出しますか?

上記のFOO例では、別のプログラムを実行すると、FOO変数がエクスポートされないため、変数は表示されません。それはその1つのシェルインスタンス内にのみ存在します。

$ echo $FOO
bar
$ bash
$ echo $FOO

$ exit
$ export FOO
$ bash
$ echo $FOO
bar

bash既に使用しているシェルの下で新しいシェルを最初に実行してから、の値を表示しようとするとFOOFOOサブプログラムが表示できるようにエクスポートされなかったため、空白が表示されます。次に、2番目のbashインスタンスを終了してエクスポートし、bash再度実行すると、2番目のインスタンスにの値が表示されFOOます。

あなたは使いexportますが、サブプログラムはシェルで設定した値を確認したいとき、あなたはそれが起こるしたくない場合にそれを使用しないでください。

通常、シェルスクリプトで一時変数をエクスポートすることはありません。シェルスクリプトからプログラムが実行される方法を変更しないようにするためです。

他の質問には答えません。一度に1つだけ質問することになっています。彼らは漠然と関連しているので、私はこれだけ答えました。他のすべては別の質問に属しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.