Antworten:
.profile gegen .zprofileZsh wird ausgeführt ~/.zprofile, nicht ~/.profile, wenn es als Anmeldeshell aufgerufen wird. Der Grund dafür ist, dass zsh mit Standard-Shells nicht kompatibel genug ist, um Skripte zu brechen.
Zsh wird ausgeführt, ~/.profilewenn es als shoder aufgerufen wird ksh. Wenn Ihr Ziel jedoch darin besteht, beim Anmelden eine zsh-Eingabeaufforderung zu erhalten, ist dies keine Hilfe.
Sie können /bin/shIhre Login - Shell erstellen und export SHELL=/bin/zshin Ihre einbinden ~/.profile. Wenn Sie dann ein Terminal öffnen, startet das Terminal zsh (mit Ausnahme einiger Terminalemulatoren, die die $SHELLEinstellung nicht beachten ). Aber du wirst immer noch haben, shwenn du dich über ssh anmeldest. Dies kann durch Einfügen exec zsham Ende von behoben werden ~/.profile(dies ersetzt die laufende Shell durch zsh), aber Sie müssen vorsichtig sein, dies nur für interaktive Anmeldungen zu tun und nicht, wenn dies ~/.profileaus anderen Skripten wie dem X-Sitzungsstart (ein guter Wert) enthalten ist Test ist der Name des Prozesses Eltern erhalten durch ps -o comm= $PPID: wenn es sshdoder su, dann ist es sicher exec).
Die einfachste Lösung, um sowohl mit zsh als auch mit run zu arbeiten, ~/.profilebesteht darin, einen zu erstellen ~/.zprofile, der während der Ausführung in den sh-Emulationsmodus wechselt ~/.profile:
emulate sh
. ~/.profile
emulate zsh
Wenn du in letzter Zeit genug zsh hast (unter Ubuntu heißt das, da ich das klar finde), kannst du dies vereinfachen emulate sh -c '. ~/.profile'.
.zprofile gegen .zshrcDie Datei ~/.profilewird von Login- Shells geladen . Die Login-Shell ist der erste Prozess, der gestartet wird, wenn Sie sich im Textmodus anmelden, beispielsweise auf einer Textkonsole oder über ssh. Auf den meisten Linux-Rechnern ist die Login-Shell standardmäßig bash, aber Sie können sie mit dem chshBefehl oder mit einem anderen Tool wie den „Benutzereinstellungen“ in Ubuntu ändern . Wenn es sich um eine Login-Shell handelt, liest bash, ~/.bash_profileob sie existiert, und ~/.profile, während zsh nur lesbar ist ~/.zprofile(da seine Syntax nicht vollständig mit einer herkömmlichen sh kompatibel ist). Wird in den meisten Konfigurationen ~/.profileauch von den Startskripten der X-Sitzung geladen, wenn Sie sich in einem grafischen Anzeigemanager anmelden.
Wenn Sie einen Terminalemulator starten und eine Shell-Eingabeaufforderung erhalten oder wenn Sie eine Shell explizit starten, erhalten Sie eine Shell, die keine Anmeldeshell ist. Da ~/.profile(oder ~/.zprofile) Befehle betrifft, die Sie beim Anmelden ausführen möchten, liest eine Shell ohne Anmeldung diese Datei nicht. Wenn Sie stattdessen ein interaktives zsh starten, wird es gelesen ~/.zshrc. (Zsh liest ~/.zshrcalle interaktiven Shells ein, unabhängig davon, ob es sich um Login-Shells handelt. Seltsamerweise liest bash niemals ~/.bashrcLogin-Shells ein.)
~/.profileEnthält normalerweise Umgebungsvariablendefinitionen und startet möglicherweise einige Programme, die Sie einmalig bei der Anmeldung oder während der gesamten Sitzung ausführen möchten. ~/.zshrcEnthält Aufgaben, die für jede Shell-Instanz ausgeführt werden müssen, z. B. Alias- und Funktionsdefinitionen, Einstellungen für Shell-Optionen, Vervollständigungseinstellungen, Einstellungen für Eingabeaufforderungen, Tastenzuordnungen usw.
~/.profilewird zshbei der Anmeldung nicht geladen .zshwird ~/.zprofilebeim Login geladen.zshwird ~/.zshrcbeim Starten einer neuen Terminalsitzung geladen.Benötigen Sie weitere Informationen? Schau dir Gilles 'großartige Antwort an!
Zusätzlich zu Gilles 'Antwort können Sie dies mit einer einigermaßen aktuellen Version von zsh tun:
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
... Wodurch die .profile-Datei mit dem Sh-Modus von zsh erzeugt wird. Und es ist nur während der Quelle aktiv. Sie müssen den aktuellen Optionsstatus also nicht speichern, um ihn nach dem Sourcing erneut abzuspielen.
Ich bin .zprofilekompatibel mit .profile(enthält nur PATH-Änderungen) und benötige daher nur:
ln -s .profile .zprofile
Die zsh Dokumentation ich zur Hand haben nur erwähnt /etc/profileund ~/.profilefür Login - Shells in sh / KSH - Kompatibilitätsmodus.
% zsh --version
zsh 4.3.10 …
% cat ~/.profile
echo 'Running ~/.profile...'
Anmeldeshell im einheitlichen Modus (argv [0] beginnt mit -) wird nicht verwendet ~/.profile(es wird jedoch verwendet ~/.zprofile):
% zsh -c 'exec -a -zsh zsh' </dev/null
(keine Leistung)
sh / KSH Kompatibilitätsmodus Login - Shells verwendet .profile:
% zsh -c 'exec -a -sh zsh' </dev/null
Running ~/.profile...
% zsh -c 'exec -a -ksh zsh' </dev/null
Running ~/.profile...