Die Shell, die ich normalerweise benutze, ist zsh
. Ich habe mehrere Aliase, um Farbe in einigen Programmen wie ls
und zu aktivieren grep
. Ich habe auch meinen benutzerdefinierten Pfad so festgelegt, dass ich Programme an einem nicht standardmäßigen Ort ausführen kann (z. B. in ~/bin/
).
Ich werde nicht root Shell ändern zu zsh
, aber ich möchte diese Einstellung teilen , so dass root es auch haben kann. Ich finde heraus, dass zsh
das kein Sourcing ist /etc/profile
. Ich kann es einlesen /etc/zsh/zprofile
, aber ich hätte gerne einen anderen "richtigen" Weg.
Zsh verfügt über einen sh-Kompatibilitätsmodus, mit dem POSIX-sh-Code und einige Bash-Erweiterungen ausgeführt werden können. Solange Sie keine bash-Funktionen verwenden, die zsh nicht hat (mit derselben Syntax), können Sie dieselbe Datei von beiden Shells beziehen. Verwenden Sie das
emulate
integrierte Tool, um zsh in den Kompatibilitätsmodus zu versetzen. Mit dieser-L
Option ist die Emulation lokal für die einschließende Funktion (nicht für das einschließende Skript).Für Dinge wie Umgebungsvariablen können Sie
source_sh /etc/profile
in/etc/zprofile
undsource_sh ~/.profile
in verwenden~/.zprofile
, da die Profildateien wahrscheinlich keine bash-spezifischen Funktionen verwenden.Verwenden Sie für Aliase und Funktionsdefinitionen eine Datei wie
~/.sh_aliases
die in~/.bashrc
undsource_sh
'd in~/.zshrc
.quelle
Was ist mit einem einfachen Symlink?
ln -s /etc/profile /etc/zsh/zprofile
Sie können auch so etwas anhängen, wenn Sie eine bedingte Initialisierung benötigen:
quelle
/bin/ls -l /proc/$$/exe
istps -o comm= -p $$
. Dies ist nicht vollständig zuverlässig, da sich einige Shells je nach Aufruf unterschiedlich verhalten. in der Praxis einfach testet$0
in.profile
ist wahrscheinlich eine bessere Anzeige zu sein. Aber die meisten Muscheln , die nützliche Funktionen (bash, ksh, zsh) bieten kann einfach erkannt werden (und ihre Version identifiziert, die ein großes Plus) durch einige Variablen testen:$BASH
,$BASH_VERSION
,$BASH_VERSINFO
;$KSH_VERSION
,${.sh.version}
;$ZSH_VERSION
.Bei den Variablen habe ich den Eindruck, dass Ihnen Module & Moduldateien fehlen [1]. Sobald Sie damit beginnen, ist es einfach, allgemeine Profile für verschiedene Shells (einschließlich Bash & Zsh), Python, Perl und noch mehr Umgebungen zu erstellen, und das alles aus einer einzigen Moduldatei heraus.
Es ist auch möglich, Aliase auf die gleiche Weise zu definieren. Sie werden jedoch schnell feststellen, dass Aliase zwischen aufeinander folgenden Shells nicht sehr gut vererbt werden und möglicherweise Problemumgehungen benötigen.
[1] http://en.wikipedia.org/wiki/Environment_Modules_(software)
quelle