Conflito aparente .bash_profile e .profile no Mac OS X

2

Eu tenho um problema em que, quando eu carrego novas janelas de terminal, eu tenho que fonte o ~/.profile para obter o meu caminho PHP funcionando corretamente.

Na essência do meu problema está recebendo terminal para usar o MAMP PHP e MySQL em vez de padrão.

Eu tenho os caminhos mapeados, mas toda vez que eu abro uma nova janela, eu tenho que usar o comando

source ~/.profile

Existe um motivo para o Mac OS X não estar se registrando / terceirizando / [inserir termo correto aqui] .profile ? Eu li .bash_profile irá sobrescrever .profile , mas o caminho do PHP também está definido em .bash_profile .

Aqui está o conteúdo de cada arquivo.

O conteúdo de .bash_profile :

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

O conteúdo de .profile :

export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.14/bin
export PATH="$MAMP_PHP:$PATH"
    
por Tim Plummer 19.03.2015 / 16:00

3 respostas

1

Acredito que a resposta esteja clara quando você analisar a ordem lógica do que definiu em .bash_profile (que não funciona) em comparação a .profile (que funciona).

Aqui está seu .bash_profile :

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

E aqui está seu .profile :

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

A chave para resolver isso é observar onde você está definindo seus novos itens relacionados ao MAMP quando comparado com o padrão $PATH ; o pedido conta porque o shell irá atuar (coisa chave) o primeiro item que encontrar em sua lista de caminhos de busca do usuário .

Sabendo que você pode dividir o comportamento que está vendo assim:

  • Na versão .profile , você está definindo $MAMP_PHP como variável e, em seguida, prefixando ao início do $PATH .
  • Mas na versão .bash_profile você está anexando essas coisas depois $PATH : :/Applications/MAMP/bin/php/php5.5.14/bin:/Applications/MAMP/bin/mysql

Então, eu refiz o .bash_profile desse jeito para que funcione:

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

Note como estou usando a convenção $MAMP_PHP de .profile - que é uma maneira legal de separar logicamente caminhos para olhos humanos - e como eu simplesmente defino esse valor para /Applications/MAMP/bin/php/php5.5.14/bin , já que não faço ideia quando esse MySQL caminho seria usado: /Applications/MAMP/bin/mysql .

Do meu ponto de vista usando a versão 2.1.3 do MAMP, não vejo um binário real mysql no caminho que você definiu. Tradicionalmente, isso estaria no diretório /Applications/MAMP/Library/bin/ junto com outros binários do núcleo MAMP. Então talvez seu .bash_profile deva ser ajustado assim:

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"

Além disso, esse /Users/[username]/bin parece desajeitado e específico demais para mim. Se você está mantendo um diretório ~/bin específico do diretório de usuários, você pode querer apenas configurá-lo para ~/bin desta forma:

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

Observe como não há aspas duplas ( " ) em torno da última :~/bin part; que permite que ~/ seja expandido corretamente para o diretório inicial do usuário. Dessa forma, você pode usar uma configuração .bash_profile como essa em qualquer conta de usuário em que o usuário tenha o diretório ~/bin .

    
por 19.03.2015 / 19:17
0

O Bash procura no seu diretório pessoal .bash_profile , .bash_login e .profile nessa ordem. Então o bash executará o primeiro desses que encontrar e parará de procurar.

Então, uma solução para você pode ser a origem de seu .profile no final de seu .bash_profile ou, mais simples, copiar ambas as linhas no seu .profile no final do seu .bash_profile .

    
por 19.03.2015 / 16:08
0

Em FAQ do Unix (para OS X) , podemos ler:

Bash Startup Files

When a "login shell" starts up, it reads the file "/etc/profile" and then "~/.bash_profile" or "~/.bash_login" or "~/.profile" (whichever one exists - it only reads ONE of these, checking for them in the order mentioned).

When a "non-login shell" starts up, it reads the file "/etc/bashrc" and then the file "~/.bashrc".

Note that when bash is invoked with the name "sh", it tries to mimic the startup sequence of the Bourne shell ("sh"). In particular, a non-login shell invoked as "sh" does not read any dot files by default. See the bash man page for details.

Portanto, se você já tiver ~/.bash_profile , o arquivo ~/.profile não será lido automaticamente pelo bash, então você pode adicionar as seguintes linhas no seu ~/.bash_profile para carregá-lo:

# Load user profile file
if [ -f ~/.profile ]; then
  . ~/.profile
fi
    
por 19.03.2015 / 19:14