0

サイトからGITをMacにインストールしましたが、 git --version で古いインストールが提供されました(xcodeのインストールだと思います)。だから私はこれをやって解決しました:

  • ~/.bash_profile ファイルを作成する
  • 書きます:

    export PATH=/usr/local/bin:$PATH

  • ターミナルを再起動します

ただし、私の構成には、より適切にセットアップできるものがあると思います。

私の現在のエコー $PATH

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin

それでうまくいきますが、2つの /usr/local/bin と /usr/local/git/bin があるので、かなり混乱しています

また、 /usr/local/bin には bbedit コマンドしか含まれていないため、なぜ機能するのか理解できません。

  • bbdiff
  • 編集
  • bbfind

すべてのパス構成ファイルとそれらが読み取られる実際の順序はよくわかりません。私はいくつかのUNIXコマンドしか知りません..〜/の私の現在のファイルは次のとおりです。

~/.profile:

if [ -f ~/.bashrc ];
then
    source ~/.bashrc
fi

~/bashrc:

. ~/bin/dotfiles/bashrc

で。~/bin/dotfiles/bashrc

. ~/bin/dotfiles/bash/env
. ~/bin/dotfiles/bash/config
. ~/bin/dotfiles/bash/aliases

とで。~/bin/dotfiles/bash/env:

export PATH=/usr/local/bin:/opt/local/bin:/opt/local/sbin:$PATH

. ~/bin/dotfiles/bash/config は空です

と 。~/bin/dotfiles/bash/aliases にはいくつかのエイリアス コマンドが含まれています。

とにかく、~/bin/dotfiles/bash/env を読むべきだったのですが、そうではありません。または、 /etc/paths の後にのみ読み取ります

~/.bash_profile が代わりに最初に読み込まれます。

私の現在の /etc/paths コンテンツ:

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

これらのメカニズムを説明できる人はいますか? :P または、この質問を Unix グループに投稿する必要がありますか?

4

2 に答える 2

2

*NIX シェルでコマンドを入力すると、シェルは$PATH. パスが だとすると/usr/bin:/usr/local/bin、次のようになります。

$ foo
- Does /usr/bin/foo exist? No.
- Does /usr/local/bin/foo exist? No.
- Does foo exist in the current working directory?

つまり、各$PATH要素を順番に調べて、要求された実行可能ファイルを見つけようとします。これが、システム全体のコマンドではなく、現在のディレクトリで実行可能ファイルを実行することを明示するために、通常のconfigure手順がmakemake install始まる理由です。./configureconfigure

foo最終的にどちらが実際に選択されているかを判断するには、次を実行します。

$ which foo

フルパスを指定することで、任意のコマンドを明示的に実行できます。

$ /usr/local/bin/foo  # overrides /usr/bin/foo, should it exist

初期化スクリプトのexport PATH=...:$PATHディレクティブは、特定のパスをパスの先頭に追加するだけで、コマンドが解決される順序の優先順位をオーバーライドできます。そこに 2 度あるのは理想的で/usr/local/binはありませんが、実際には問題ではありません。パスが長くなりすぎないように注意する必要があります。これは、コマンドごとに多くのルックアップが発生し、頭がおかしくなる可能性があるためです

于 2013-03-02T12:18:41.063 に答える
0

bash 構成ファイルの読み込み順序の包括的なウォークスルーについては、これを参照してください。

于 2013-03-02T12:27:54.830 に答える