Yanıtlar:
.profile vs. .zprofileZsh ~/.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. .zshrcDosya 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.
~/.profilezshgiriş sırasında yüklenmedi .zsh~/.zprofilegiriş sırasında yükler .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!
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.
.zprofileUyumlu olduğum .profile(sadece PATH değişiklikleri içeriyor), bu nedenle sadece ihtiyaç duyuyorum :
ln -s .profile .zprofile
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...