Mac OSのPATHとは何ですか?

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

では、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

コメント

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

回答

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

PATH 環境変数で、コロンで区切られたディレクトリのリストが含まれています。シェルは、コマンドラインで指定した実行可能ファイルを検索します。それらへの明示的なパス(jsdocの例のように)。したがって、PATH

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

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

2。 / etc / pathsと〜/ .bash_profile

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

Forレコード/etc/pathsはMACOSの特性のようです。少なくとも、GNU / Linuxでは見たことがありません。

コメント

  • 編集したばかりですが、すべて回答していただきありがとうございます。
  • @ggundersen編集した質問に合うように回答をトリミングしました。
  • @ggundersen 私の答えとthも読むことをお勧めしますOSXの/etc/pathsに関するリンクがあります。

回答

PATHの目的は何ですか?

これがシェルはプログラムを検索します。たとえば、lsと入力すると、/binlsというプログラムが実行されます。 Mac OS Xを含むほとんどのシステムのdiv>。シェルは、/binPATHにあるためにのみそれを見つけることができます。

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

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

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

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

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

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

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

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

$ FOO=bar $ echo $FOO bar $ echo $FOOx $ echo ${FOO}x barx 

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

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

$ echo "$FOO"x barx 

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

私は環境変数を使用します。上記で記述した内容はすべて、これは単なる別の環境変数であるためです。例のテキストははるかに長くなります。

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

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

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

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

exportは、サブプログラムにシェルで設定された値を表示させ、使用しない場合に使用します。

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

私はあなたの他の質問に答えるつもりはありません。あなたは一度に1つの質問だけをすることになっています。漠然と関係しているので、私はこれだけ多く答えました。他のすべては別の質問に属します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です