Antworten:
.profile
gegen .zprofile
Zsh 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, ~/.profile
wenn es als sh
oder aufgerufen wird ksh
. Wenn Ihr Ziel jedoch darin besteht, beim Anmelden eine zsh-Eingabeaufforderung zu erhalten, ist dies keine Hilfe.
Sie können /bin/sh
Ihre Login - Shell erstellen und export SHELL=/bin/zsh
in Ihre einbinden ~/.profile
. Wenn Sie dann ein Terminal öffnen, startet das Terminal zsh (mit Ausnahme einiger Terminalemulatoren, die die $SHELL
Einstellung nicht beachten ). Aber du wirst immer noch haben, sh
wenn du dich über ssh anmeldest. Dies kann durch Einfügen exec zsh
am 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 ~/.profile
aus 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 sshd
oder su
, dann ist es sicher exec
).
Die einfachste Lösung, um sowohl mit zsh als auch mit run zu arbeiten, ~/.profile
besteht 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 .zshrc
Die Datei ~/.profile
wird 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 chsh
Befehl oder mit einem anderen Tool wie den „Benutzereinstellungen“ in Ubuntu ändern . Wenn es sich um eine Login-Shell handelt, liest bash, ~/.bash_profile
ob 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 ~/.profile
auch 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 ~/.zshrc
alle interaktiven Shells ein, unabhängig davon, ob es sich um Login-Shells handelt. Seltsamerweise liest bash niemals ~/.bashrc
Login-Shells ein.)
~/.profile
Enthä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. ~/.zshrc
Enthä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.
~/.profile
wird zsh
bei der Anmeldung nicht geladen .zsh
wird ~/.zprofile
beim Login geladen.zsh
wird ~/.zshrc
beim 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 .zprofile
kompatibel 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/profile
und ~/.profile
fü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...