Powłoka, której zwykle używam, to zsh
. Mam kilka aliasów, aby włączyć kolor w niektórych programach, takich jak ls
i grep
. Ustawiłem także własną ścieżkę, aby móc uruchamiać programy w niestandardowym miejscu (np. In ~/bin/
).
I nie zmieni powłoki roota do zsh
, ale chciałbym podzielić te ustawienia tak, że root może mieć równie dobrze. Dowiaduję się, że zsh
to nie jest pozyskiwanie /etc/profile
. Mogę to zdobyć /etc/zsh/zprofile
, ale chciałbym w inny, bardziej „właściwy” sposób.
Zsh ma tryb kompatybilności sh, który pozwoli mu wykonać kod sh POSIX i niektóre rozszerzenia bash. Dopóki nie używasz funkcji bash, których nie ma zsh (z tą samą składnią), możesz mieć ten sam plik pochodzący z obu powłok. Użyj
emulate
wbudowanego, aby przełączyć zsh w tryb zgodności; z tą-L
opcją emulacja jest lokalna dla funkcji zamykającej (a nie załączającego skryptu źródłowego).W przypadku takich zmiennych środowiskowych można używać
source_sh /etc/profile
do/etc/zprofile
isource_sh ~/.profile
z~/.zprofile
, ponieważ pliki profilu prawdopodobnie nie będą używać funkcji specyficznych dla bash.Na takie rzeczy jak aliasów i definicji funkcji, ponieważ pliki powłoki rc prawdopodobnie zawierają wiele rzeczy, które nie mogą być udostępniane (Podpowiedź, kluczowych powiązań, ustawienia zakończeniu, ...), należy jak plik
~/.sh_aliases
, który jest pozyskiwany w~/.bashrc
isource_sh
„d w~/.zshrc
.źródło
Co z prostym dowiązaniem symbolicznym?
ln -s /etc/profile /etc/zsh/zprofile
Możesz także dołączyć coś takiego, jeśli potrzebujesz warunkowej inicjalizacji:
źródło
/bin/ls -l /proc/$$/exe
tops -o comm= -p $$
. Nie jest to w pełni niezawodne, ponieważ niektóre powłoki zachowują się inaczej w zależności od sposobu ich wywołania; w praktyce po prostu testuje$0
się.profile
będzie prawdopodobnie lepszy wskazanie. Ale większość muszli, które oferują użytecznych funkcji (bash, ksh, zsh) można po prostu uznawane (i ich wersja zidentyfikowane, co jest dużym plusem) testując kilka zmiennych:$BASH
,$BASH_VERSION
,$BASH_VERSINFO
;$KSH_VERSION
,${.sh.version}
;$ZSH_VERSION
.Jeśli chodzi o zmienne, mam wrażenie, że brakuje wam modułów i plików modułów [1]. Gdy zaczniesz to robić, łatwo będzie utworzyć wspólne profile dla różnych powłok (w tym bash i zsh), python, perl i jeszcze więcej środowisk, a wszystko to z wygody pojedynczego pliku modułu.
Możliwe jest również zdefiniowanie aliasów w ten sam sposób; szybko jednak przekonasz się, że aliasy nie są dobrze dziedziczone między kolejnymi powłokami i mogą wymagać obejścia.
[1] http://en.wikipedia.org/wiki/Environment_Modules_(software)
źródło