Zsh ~ / .profile isabet değil


145

Ubuntu sistemime az önce zsh yükledim. Görünüşe göre zsh init'de ~ / .profile dosyasını çalıştırmıyor. En iyi anladığım kadarıyla, bu otomatik bir davranış olmalı. Neyi kaçırıyorum?

Yanıtlar:


204

.profile vs. .zprofile

Zsh ~/.zprofile, ~/.profilegiriş kabuğu olarak çağrıldığında değil çalışır . Bunun nedeni, zsh'nin senaryoları kırmak için standart mermilerle yeterince uyumsuzluğa sahip olmasıdır.

Zsh çalışıyor mu ~/.profileo kadar çağrılıp çağrılmadığını shveya ksh. Ancak, hedefiniz giriş yaptığınızda bir zsh istemi almaksa, bunun bir yardımı olmaz.

Sen yapabilir /bin/shgiriş kabuğu ve dahil export SHELL=/bin/zshGözlerinde farklı ~/.profile. Ardından bir terminal açtığınızda, terminal zsh'yi başlatır (birkaç terminal emülatörü hariç $SHELLayara uymaz ). Ancak shssh üzerinden giriş yaptığınızda yine de sahip olacaksınız. Bu exec zsh, sonuna ekleyerek düzeltilebilir ~/.profile(bu, çalışan kabuğu zsh ile değiştirir), ancak bunu yalnızca etkileşimli girişler için yapmak için dikkatli olmanız gerekir, ancak ~/.profileX oturumu başlangıcı gibi diğer komut dosyalarına dahil edilmediğinde (iyi bir Test yoluyla elde edilen ana sürecinin adıdır ps -o comm= $PPID: o eğer sshdyoksa su, o zaman için güvenli exec).

Hem zsh hem de run ile çalışmak için en kolay çözüm, çalışırken emülasyon kipine giren bir komut ~/.profileoluşturmaktır :~/.zprofile~/.profile

emulate sh
. ~/.profile
emulate zsh

Eğer yeterince yeni bir zsh'ınız varsa (Ubuntu'da, bunun anlamı berrak olduğundan beri, sanırım), bunu basitleştirebilirsiniz emulate sh -c '. ~/.profile'.

.zprofile vs. .zshrc

Dosya giriş kabukları ~/.profiletarafından yüklenir . Oturum açma kabuğu, metin modunda, örneğin bir metin konsolunda veya ssh aracılığıyla oturum açtığınızda başlatılan ilk işlemdir. Varsayılan olarak, çoğu Linux makinesinde, giriş kabuğu bash, ancak bunu komutla veya Ubuntu'daki “Kullanıcı Ayarları” gibi başka bir araçla değiştirebilirsiniz. Bir giriş kabuğu olduğunda bash, var olup olmadığını ve zsh sadece okur ( okuma sözdizimi geleneksel bir sh ile tam olarak uyumlu olmadığı için). Çoğu yapılandırmada, bir grafik görüntü yöneticisinde oturum açtığınızda X oturumu başlangıç ​​komut dosyaları tarafından da yüklenir.chsh~/.bash_profile~/.profile~/.zprofile~/.profile

Bir terminal emülatörü başlatıp bir kabuk istemi aldığınızda veya açıkça bir kabuk başlattığınızda, giriş kabuğu olmayan bir kabuk alırsınız. Yana ~/.profile(veya ~/.zprofile) her giriş, yürütmek istediğiniz komutları içindir olmayan bir giriş kabuğu bu dosyayı okumuyor. Bunun yerine, etkileşimli bir zsh başlattığınızda, okur ~/.zshrc. (Zsh ~/.zshrc, oturum açma kabukları olmasın, tüm etkileşimli kabuklarda okur ; bash, garip, ~/.bashrcoturum açma kabuğunda hiç okumaz .)

Genellikle, ~/.profileortam değişkeni tanımları içerir ve oturum açtığınızda veya tüm oturum için bir kez çalıştırmak istediğiniz bazı programları başlatabilir; ~/.zshrctakma ad ve işlev tanımları, kabuk seçeneği ayarları, tamamlama ayarları, bilgi istemi ayarları, tuş bağlamaları gibi her kabuk örneği için yapılması gerekenleri içerir.


Mükemmel cevap! ~ / .Zprofile dosyasını yarattım ve önerdiğiniz gibi satırı koydum, ancak hiçbir şey yapmıyor gibi görünüyor. Belki de .zshrc içine koymalıyım?
shmichael

1
@ shmichael: Tepkileriniz göz önüne alındığında, sorunuzun amacını belirttiğiniz şekilde yorumlayamamış olabilirim. Cevabımı eklediğim ikinci bölüm yardımcı oluyor mu?
Gilles

evet, orayı vur. Yani doğru anlarsam, örneğin .zprofile ve .zshrc'deki diğer isimler hakkındaki PATH bildirimlerini isterim.
shmichael

@ user1419674 Düzeltme için teşekkür ederiz, ancak yayınlara değişiklik günlüğü eklemeyin. Site yerleşik bir revizyon geçmişine sahiptir.
Gilles

69

Sabırsız insanlar için kısa cevap:

  1. ~/.profilezshgiriş sırasında yüklenmedi .
  2. zsh~/.zprofilegiriş sırasında yükler .
  3. zsh~/.zshrcYeni bir terminal oturumu başlatırken yükler .

Daha fazla bilgiye mi ihtiyacınız var? Gilles'nun mükemmel cevabına bak!


Mükemmel cevap. Sadece ihtiyacın olanı.
Django Reinhardt

21

Gilles'in cevabına ek olarak, son derece zsh versiyonuyla bunu yapabilirsiniz:

[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'

... .profile dosyasını, zsh'ın sh-mode'u etkin kılan kaynak. Ve sadece kaynak sırasında aktif. Bu nedenle kaynak yaptıktan sonra tekrar oynatmak için mevcut seçenek durumunu kaydetmeniz gerekmez.


Bunu ~ / .zprofile dosyamda var, fakat bazı nedenlerden dolayı ~ / .profile içindeki ifadeler kabuğumda mevcut değil. Ubuntu 15.04; zsh 5.0.7
friederbluemle

Kod olmadan teşhis etmek zor.
Frank Terbeck 27:16

Sadece tekrar denedim ve şimdi çalışıyor gibi görünüyor. Bir noktada sabitlendiğinden ya da ne olduğundan emin değil. Şimdi zsh versiyonu 5.1.1.
friederbluemle

5

.zprofileUyumlu olduğum .profile(sadece PATH değişiklikleri içeriyor), bu nedenle sadece ihtiyaç duyuyorum :

ln -s .profile .zprofile

0

Zsh Ben taraftan sahip belgeler sadece bahseder /etc/profileve ~/.profileoturum açma kabukları için sh / Ksh uyumluluk modunda.

% zsh --version
zsh 4.3.10 
% cat ~/.profile
echo 'Running ~/.profile...'

Yerel mod giriş kabuğu (argv [0] ile başlar -) kullanmaz ~/.profile(yine de kullanır ~/.zprofile):

% zsh -c 'exec -a -zsh zsh' </dev/null

(çıktı yok)

sh / Ksh uyumluluk modu giriş kabukları .profile dosyalarını kullanır:

% zsh -c 'exec -a -sh zsh' </dev/null
Running ~/.profile...
% zsh -c 'exec -a -ksh zsh' </dev/null
Running ~/.profile...
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.