- Konu sahibi
- #1
macOS’ta Terminal açılır açılmaz beklenmedik bir ortam görüyorsanız, sorun çoğu zaman tek bir yerde değildir. Terminal’in hangi kabuğu başlattığı, o kabuğun login mi interactive mi olduğu ve hangi başlangıç dosyalarının okunduğu farklı şeylerdir. Bu ayrımı bilmek; PATH, alias, fonksiyon, ortam değişkeni ve GNU araçlarıyla ilgili sorunları daha hızlı çözmenizi sağlar.
Önce shell’i, sonra dosyayı düşünün
Terminal uygulaması yeni pencere açarken kabuk seçimini kendi ayarlarından yapar; macOS’ta varsayılan kabuk zsh’dir ve istenirse farklı bir kabuk da seçilebilir. Yani önce hangi programın çalıştığını bilmek gerekir, sonra o programın hangi dosyaları okuduğunu. Shell değiştiğinde başlangıç dosyaları da değişir; bash ile zsh aynı dosyaları kullanmaz.
zsh tarafında genel kural şudur:
Ne nereye yazılmalı?
Genel pratik şu şekilde düşünülür:
Sık kullandığınız alias, fonksiyon ve interaktif ayarlar: çoğunlukla
Her açılışta gerekli ortam değişkenleri: login akışında okunan dosyalar, örneğin
Tüm shell oturumlarına yansıyacak kadar temel ayarlar: dikkatli olmak şartıyla
Bash kullanan eski kurulumlar:
Buradaki kritik nokta, her dosyaya her şeyi yazmamak. Mesela terminale her açılışta çıktı bastıran bir komutu
macOS’ta en sık karışan durum
Kullanıcı Terminal’de bir ayarı değiştirir, ama yeni pencerede etkisini görmez. Bunun nedeni bazen iki ayrı seçimdir: Terminal’in hangi shell’i başlattığı ve o shell’in hangi başlangıç dosyasını okuduğu. Bir de üstüne macOS’un varsayılan shell’i ile kullanıcı hesabında tanımlı login shell farklı olabilir. Bu durumda aynı makinede bir pencere zsh, başka bir süreç bash gibi davranabilir.
Örneğin GNU araçlarını macOS’ta kullanıyorsanız, sistemdeki
Hızlı kontrol listesi
Sorun yaşadığınızda önce şu sırayla bakmak işleri sadeleştirir:
Hangi shell çalışıyor?
O shell login mi interactive mi? Bu, hangi dosyanın okunacağını belirler.
Ayarı hangi dosyaya yazdınız? Shell tipine uygun mu?
GNU araçları için PATH değişikliği doğru yerde mi?
Terminal profili mi değişti, yoksa shell başlangıcı mı?
Bu ayrımı doğru yapmak, "ayar kaydedilmedi" gibi görünen sorunların çoğunu çözer. Aslında çoğu zaman ayar kaybolmamıştır; sadece farklı bir oturum türünde başka bir dosya devreye girmiştir.
Pratik karar özeti
Eğer amacınız terminal görünümünü, alias’ları ve günlük kullanım kolaylığını ayarlamaksa interaktif shell dosyasına odaklanın. Eğer PATH, locale veya araçların her oturumda görünmesi gerekiyorsa login akışını düşünün. GNU araçlarını macOS üzerinde kullanıyorsanız da sistem araçlarını ezmeden, hangi sürümün önce geldiğini netleştirin. Bu üç adım netleşince macOS, Linux ve GNU araçları arasında yaşanan karışıklıklar büyük ölçüde azalır.
Önce shell’i, sonra dosyayı düşünün
Terminal uygulaması yeni pencere açarken kabuk seçimini kendi ayarlarından yapar; macOS’ta varsayılan kabuk zsh’dir ve istenirse farklı bir kabuk da seçilebilir. Yani önce hangi programın çalıştığını bilmek gerekir, sonra o programın hangi dosyaları okuduğunu. Shell değiştiğinde başlangıç dosyaları da değişir; bash ile zsh aynı dosyaları kullanmaz.
zsh tarafında genel kural şudur:
.zshenv her çalıştırmada okunur; .zprofile login shell’de; .zshrc interactive shell’de; .zlogin ise login shell çıkışına yakın bir aşamada okunur. Bash tarafında ise interactive login shell, önce /etc/profile sonra ilk bulunan ~/.bash_profile, ~/.bash_login veya ~/.profile dosyasını okur. Bu yüzden "bir ayarı nereye yazayım?" sorusunun cevabı, önce shell tipine bağlıdır.Ne nereye yazılmalı?
Genel pratik şu şekilde düşünülür:
Sık kullandığınız alias, fonksiyon ve interaktif ayarlar: çoğunlukla
.zshrc.Her açılışta gerekli ortam değişkenleri: login akışında okunan dosyalar, örneğin
.zprofile.Tüm shell oturumlarına yansıyacak kadar temel ayarlar: dikkatli olmak şartıyla
.zshenv.Bash kullanan eski kurulumlar:
.bash_profile ile .bashrc farkını ayırmak gerekir.Buradaki kritik nokta, her dosyaya her şeyi yazmamak. Mesela terminale her açılışta çıktı bastıran bir komutu
.zshenv içine koyarsanız, non-interactive komutları da etkileyebilir. Aynı şekilde sadece interaktif kullanım için gereken alias’ları login dosyasına koyarsanız, bazı oturumlarda görünmezler.macOS’ta en sık karışan durum
Kullanıcı Terminal’de bir ayarı değiştirir, ama yeni pencerede etkisini görmez. Bunun nedeni bazen iki ayrı seçimdir: Terminal’in hangi shell’i başlattığı ve o shell’in hangi başlangıç dosyasını okuduğu. Bir de üstüne macOS’un varsayılan shell’i ile kullanıcı hesabında tanımlı login shell farklı olabilir. Bu durumda aynı makinede bir pencere zsh, başka bir süreç bash gibi davranabilir.
Örneğin GNU araçlarını macOS’ta kullanıyorsanız, sistemdeki
ls, sed, grep ile Homebrew üzerinden gelen sürümler farklı olabilir. Homebrew coreutils paketinde bazı komutlar g önekiyle gelir; ayrıca gnubin yolunu PATH’e ekleyerek GNU sürümlerini öne alabilirsiniz. Ama bu değişiklikleri yanlış dosyaya yazarsanız sadece bazı oturumlarda çalışır, bazılarında çalışmaz.Hızlı kontrol listesi
Sorun yaşadığınızda önce şu sırayla bakmak işleri sadeleştirir:
Hangi shell çalışıyor?
echo $SHELL ile değil, o anki kabuğu gerçekten görmek için echo $0 veya benzeri yöntemlerle kontrol edin.O shell login mi interactive mi? Bu, hangi dosyanın okunacağını belirler.
Ayarı hangi dosyaya yazdınız? Shell tipine uygun mu?
GNU araçları için PATH değişikliği doğru yerde mi?
Terminal profili mi değişti, yoksa shell başlangıcı mı?
Bu ayrımı doğru yapmak, "ayar kaydedilmedi" gibi görünen sorunların çoğunu çözer. Aslında çoğu zaman ayar kaybolmamıştır; sadece farklı bir oturum türünde başka bir dosya devreye girmiştir.
Pratik karar özeti
Eğer amacınız terminal görünümünü, alias’ları ve günlük kullanım kolaylığını ayarlamaksa interaktif shell dosyasına odaklanın. Eğer PATH, locale veya araçların her oturumda görünmesi gerekiyorsa login akışını düşünün. GNU araçlarını macOS üzerinde kullanıyorsanız da sistem araçlarını ezmeden, hangi sürümün önce geldiğini netleştirin. Bu üç adım netleşince macOS, Linux ve GNU araçları arasında yaşanan karışıklıklar büyük ölçüde azalır.
| Konu | Kısa not |
|---|---|
| macOS Terminal penceresinin hangi kabuğu başlatacağını ayarlamak | Terminal > Settings > General altında "Shells open with" seçeneği |
| Zsh açılış dosyaları neden karışır | .zprofile login shell, .zshrc interactive shell için okunur |
| Bash kullananlar için başlangıç dosyası farkı | Interactive login shell, önce /etc/profile, sonra ilk bulunan ~/.bash_profile / ~/.bash_login / ~/.profile |
| GNU araçlarını macOS üzerinde sistem araçlarına karıştırmadan kullanmak | Homebrew coreutils paketinde komutlar çoğu zaman g önekiyle gelir ve gnubin PATH’e eklenebilir |