Mac OS X'te Görünen .bash_profile ve .profile çakışması


2

Yeni terminal pencereleri yüklediğimde ~/.profilePHP yolumu düzgün çalıştıracak şekilde kaynak yapmak zorunda olduğum bir sorunum var .

Sorunumun özü, MAMP PHP ve varsayılan yerine MySQL kullanmak için terminal kullanmaktır.

Yolları eşleştirdim, ancak her yeni pencereyi açtığımda, komutu kullanmalıyım.

source ~/.profile

Mac OS X’in kaydolmamasının / kaynak olmamasının / [buraya doğru terimi girin] bir nedeni var mı .profile? Okudum .bash_profilegeçersiz kılacak .profile, ancak PHP yolu da tanımlanmıştır .bash_profile.

İşte her dosyanın içeriği.

İçeriği .bash_profile:

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

İçeriği .profile:

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

1
OS X Terminali varsayılan olarak bir giriş kabuğu açar, bu yüzden kaynak yapmalıdır .bash_profile. Kaynaklı olduğuna emin misin .bash_profile? İçine bir echo "sourcing bash profile"ifade koy ve dene. Ve gerçekten, .bash_profilevar olduğunda, .profilekaynaklanmayacak (bkz. Bash kılavuzu )
slhck

@slhck - benim bash_profile dosyamın içerdiği yol doğru değil mi? Okudukları şekilde, extport PATH=satırda çoklu yol seçenekleri verebilirim ya da tOO değişkeni / params / dışa aktarma FOO = BAR'ı ne olursa olsun ayarlayabilirim ve sonra :PATH bildirimindeki ayrı değerler yoluyla art arda yolları dahil edebilirim . Eğer bash profili geçersiz kılıyorsa, benim bashımdaki PATH bildirimi baskın mıdır?
Tim Plummer

@slhck - Öyle olabilir. Bash_profile dosyasındaki bildirimin sırasını değiştirdim export PATH=/foo/bar:/Applications/whatever:$PATHve çalışıyor gibi görünüyor. Böylece $PATHsonunda gitmek zorunda. Bunun önemli olduğunu düşünmedim, ama her seferinde bir nikel olsaydı yanılmışım ...
Tim Plummer

1
Bunun çalışmadığından% 100 emin misin? Çıktısı nedir which mysqlve which php? Peki ya nasıl echo $PATH?
JakeGould

Hayır, PATH'niz başlangıçta da gidebilir, tercih sırasını değiştirir. Belki başka bir sorun vardı, ancak her iki şekilde de, nasıl çözdüğünüzü açıklayan bir cevap göndermek isteyebilirsiniz.
slhck

Yanıtlar:


1

.bash_profile(İşe yaramayan) ile karşılaştırıldığında ayarladığınız şeyin mantıksal sırasına baktığınızda cevabın net olduğuna inanıyorum .profile.

İşte senin .bash_profile:

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

Ve işte senin .profile:

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

Bunu çözmenin püf noktası, yeni MAMP ile ilgili öğelerinizi varsayılan değere kıyasla nerede ayarlayacağınıza bakmaktır $PATH; sipariş, kabuk , kullanıcı arama yolları listesinde bulduğu ilk öğeye (anahtar şey) göre davranacağından sayılır .

Gördüğünüz davranışları bu şekilde çözebileceğinizi bilmek:

  • Gelen .profilesürümü Eğer ayarlıyorsunuz $MAMP_PHPsonra bir değişken olarak ve prepending bunu başından arasında $PATH.
  • Ancak .bash_profilesürümde bu şeyleri sonra ekliyorsunuz : $PATH:/Applications/MAMP/bin/php/php5.5.14/bin:/Applications/MAMP/bin/mysql

Böylece .bash_profileçalışmasını sağlamak için bu şekilde elden geçirin :

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

Ben kullanıyorum nasıl Not $MAMP_PHPgelen kongre .profile-ki mantıklı insan için yollarını ayıran güzel bir yoludur gözlerin-ve ben sadece o değeri ayarlamak nasıl /Applications/MAMP/bin/php/php5.5.14/binbu MySQL yolu kullanılacak hiçbir fikrim yok çünkü: /Applications/MAMP/bin/mysql.

Bakış açımdan MAMP sürüm 2.1.3'ü kullanarak mysqlayarladığınız yolda gerçek bir ikili göremiyorum . Geleneksel olarak bu /Applications/MAMP/Library/bin/, diğer MAMP çekirdek ikili dosyaları ile birlikte dizinde olacaktır . Öyleyse belki de .bash_profileşu şekilde ayarlanmalı:

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"

Ayrıca, bu /Users/[username]/binbenim için çok ağır ve çok özel görünüyor. Bir kullanıcı dizinine özgü bir ~/bindizini tutuyorsanız, bunu sadece şu şekilde ayarlamak isteyebilirsiniz ~/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

"Son :~/binkısmın etrafında çift ​​tırnak ( ) olmadığına dikkat edin ; Bu, ~/kullanıcının ana dizinine düzgün şekilde genişletmenizi sağlar . Bu şekilde, böyle bir .bash_profilekurulumu kullanıcının ~/bindizininin bulunduğu herhangi bir kullanıcı hesabında temiz bir şekilde kullanabilirsiniz .


0

Bash için ev dizininde arar .bash_profile, .bash_loginve .profilebu sırayla. Ardından, bash bulduğu ilk şeyden koşup bakmayı bırakacaktır.

Yani, sizin için bir çözüm, kaynağınla olabilir .profile, aramalarınızdan sonunda .bash_profile, ya daha basit sizinle ilgili şu iki satırını kopyalayıp .profile, aramalarınızdan sonunda .bash_profile.


1
OP, .bash_profileyine de ilgili çizgilere sahip olduklarını söyledi . Yani görünüşte kaynaklı değil.
slhck

0

In (OS X için) Unix SSS biz okuyabilir:

Bash Başlangıç ​​Dosyaları

Bir "giriş kabuğu" başladığında, "/ etc / profile" dosyasını ve ardından "~ / .bash_profile" veya "~ / .bash_login" veya "~ / .profile" ( hangisi varsa) okur - sadece BİR okur Bunlardan , belirtilen sırayla onları kontrol).

Bir "oturum açmayan kabuk" başladığında, "/ etc / bashrc" dosyasını ve ardından "~ / .bashrc" dosyasını okur.

Bash, "sh" adı ile çağrıldığında, Bourne kabuğunun ("sh") başlangıç ​​sırasını taklit etmeye çalıştığını unutmayın. Özellikle, "sh" olarak çağrılan giriş yapmayan bir kabuk varsayılan olarak herhangi bir nokta dosyasını okumaz . Ayrıntılar için bash man sayfasına bakın.

Zaten zaten varsa ~/.bash_profile, dosya ~/.profileotomatik olarak bash tarafından okunmaz, böylece ~/.bash_profileyüklemek için içine aşağıdaki satırları ekleyebilirsiniz :

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

1
“Öyleyse ~/.bash_profile, dosya ~/.profileotomatik olarak bash tarafından okunmayacak…” Evet, bu doğru. Fakat asıl mesele değil. Asıl mesele, MAMP yollarının içinde bulundukları zamana dikkat etmemeleridir ~/.bash_profileancak ~/.profilezorla yüklendikleri sırada çalışırlar source ~/.profile.
JakeGould
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.