web-dev-qa-db-ja.com

Mac OSXでの明らかな.bash_profileと.profileの競合

新しいターミナルウィンドウをロードするときに、PHPパスを正しく機能させるために、~/.profileをソースする必要があるという問題があります。

私の問題の本質は、ターミナルがデフォルトの代わりにMAMP PHPとMySQLを使用するようにすることです。

パスがマップされていますが、新しいウィンドウを開くたびに、コマンドを使用する必要があります

source ~/.profile

Mac OSXが登録/ソーシング/ [ここに正しい用語を挿入] .profileを行わない理由はありますか? .bash_profile.profileを上書きすることを読みましたが、PHPパスは.bash_profileでも定義されています。

各ファイルの内容は次のとおりです。

.bash_profileの内容:

export PATH="$PATH:/Users/[username]/bin:/Applications/MAMP/bin/php/php5.5.14/bin:/Applications/MAMP/bin/mysql"

.profileの内容:

export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.14/bin
export PATH="$MAMP_PHP:$PATH"
2
Tim Plummer

.bash_profile(機能する)と比較して、.profile(機能しない)に設定したものの論理的な順序を見ると、答えは明らかだと思います。

これがあなたの.bash_profileです:

export PATH="$PATH:/Users/[username]/bin:/Applications/MAMP/bin/php/php5.5.14/bin:/Applications/MAMP/bin/mysql"

そしてここにあなたの.profileがあります:

export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.14/bin
export PATH="$MAMP_PHP:$PATH"

これを解決するための鍵は、デフォルトの$PATHと比較して、新しいMAMP関連アイテムをどこに設定しているかを確認することです。シェルが(重要なこと)ユーザー検索パスのリストで最初に見つけたアイテムに作用するため、注文はカウントされます。

あなたがこのように見ている行動を分解できることを知っている:

  • .profileバージョンでは、$MAMP_PHPを変数として設定し、prepending$PATHのbeginning
  • しかし、.bash_profileバージョンでは、あなたはappendingこのようなものafter$PATH:/Applications/MAMP/bin/php/php5.5.14/bin:/Applications/MAMP/bin/mysql

だから私はそれが機能するように.bash_profileをこのように作り直します:

export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.14/bin
export PATH="$MAMP_PHP:$PATH:/Users/[username]/bin"

$MAMP_PHPから.profile規則をどのように使用しているかに注意してください。これは、人間の目のパスを論理的に分離するための優れた方法です。また、わからないため、その値を/Applications/MAMP/bin/php/php5.5.14/binに設定する方法にも注意してください。このMySQLパスが使用される場合:/Applications/MAMP/bin/mysql

MAMPバージョン2.1.3を使用している私の見地からすると、設定したパスに実際のmysqlバイナリが表示されません。従来、これは他のMAMPコアバイナリとともに/Applications/MAMP/Library/bin/ディレクトリにあります。したがって、.bash_profileは次のように調整する必要があります。

export MAMP_BIN=/Applications/MAMP/Library/bin
export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.14/bin
export PATH="$MAMP_BIN:$MAMP_PHP:$PATH:/Users/[username]/bin"

また、その/Users/[username]/binは扱いにくく、私には具体的すぎるようです。ユーザーディレクトリ固有の~/binディレクトリを管理している場合は、次のように~/binに設定することをお勧めします。

export MAMP_BIN=/Applications/MAMP/Library/bin
export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.14/bin
export PATH="$MAMP_BIN:$MAMP_PHP:$PATH":~/bin

最後の"部分の前後に二重引用符(:~/bin)がないことに注意してください。これにより、~/をユーザーのホームディレクトリに適切に展開できます。そうすれば、ユーザーが.bash_profileディレクトリを持っている任意のユーザーアカウントで、このような~/binセットアップをきれいに使用できます。

1
JakeGould

Bashは、ホームディレクトリで.bash_profile.bash_login、および.profileをこの順序で検索します。次に、bashは最初に見つけたものを実行し、検索を停止します。

したがって、解決策は、.profileの最後に.bash_profileをソースするか、より簡単に、.profileの最後にある.bash_profileの両方の行をコピーすることです。 _。

0
jherran

nix FAQ(OS Xの場合) では次のようになります。

Bashスタートアップファイル

「ログインシェル」が起動すると、ファイル「/ etc/profile」を読み取り、次に「〜/ .bash_profile」または「〜/ .bash_login」または「〜/ .profile」を読み取ります(どちらが存在する場合でも、これらの1つのみを読み取り、記載されている順序でチェックします)。

「非ログインシェル」が起動すると、ファイル「/ etc/bashrc」を読み取り、次にファイル「〜/ .bashrc」を読み取ります。

「sh」という名前でbashが呼び出されると、Bourne Shell(「sh」)の起動シーケンスを模倣しようとすることに注意してください。特に、 "sh"として呼び出された非ログインシェルは、デフォルトではドットファイルを読み取りません。詳細については、bashのmanページを参照してください。

したがって、すでに~/.bash_profileを実行している場合、ファイル~/.profileはbashによって自動的に読み取られないため、~/.bash_profileに次の行を追加してロードできます。

# Load user profile file
if [ -f ~/.profile ]; then
  . ~/.profile
fi
0
kenorb