Le shell que j'utilise normalement est zsh
. J'ai plusieurs alias pour activer la couleur dans certains programmes tels que ls
et grep
. J'ai également défini mon chemin personnalisé afin que je puisse exécuter des programmes dans un endroit non standard (comme dans ~/bin/
).
Je ne changerai pas le shell de root en zsh
, mais je voudrais partager ces paramètres afin que root puisse également l'avoir. Je découvre que ce zsh
n'est pas du sourcing /etc/profile
. Je peux me l'approvisionner /etc/zsh/zprofile
, mais j'aimerais une autre manière plus "appropriée".
Zsh a un mode de compatibilité sh qui lui permettra d'exécuter du code POSIX sh et quelques extensions bash. Tant que vous n'utilisez pas les fonctionnalités bash que zsh n'a pas (avec la même syntaxe), vous pouvez avoir le même fichier provenant des deux shells. Utilisez le
emulate
intégré pour mettre zsh en mode de compatibilité; avec l'-L
option, l'émulation est locale à la fonction englobante (pas au script source englobant).Pour des choses comme les variables d'environnement, vous pouvez utiliser
source_sh /etc/profile
in/etc/zprofile
etsource_sh ~/.profile
in~/.zprofile
, car les fichiers de profil ne sont pas susceptibles d'utiliser des fonctionnalités spécifiques à bash.Pour des choses comme les alias et les définitions de fonctions, étant donné que les fichiers shell rc sont susceptibles de contenir beaucoup de choses qui ne peuvent pas être partagées (invite, raccourcis clavier, paramètres de complétion,…), utilisez un fichier comme
~/.sh_aliases
celui-ci qui provient de~/.bashrc
etsource_sh
'd dans~/.zshrc
.la source
Et un simple lien symbolique?
ln -s /etc/profile /etc/zsh/zprofile
Vous pouvez également ajouter quelque chose comme ceci si vous avez besoin d'une initialisation conditionnelle:
la source
/bin/ls -l /proc/$$/exe
estps -o comm= -p $$
. Ce n'est pas entièrement fiable car certains shells se comportent différemment selon la façon dont ils ont été invoqués; dans la pratique de tester simplement$0
en.profile
est d'être probablement une meilleure indication. Mais la plupart des coquilles qui offrent des fonctionnalités utiles (bash, ksh, zsh) peuvent être simplement reconnus (et leur version identifiée, ce qui est un plus) en testant certaines variables:$BASH
,$BASH_VERSION
,$BASH_VERSINFO
;$KSH_VERSION
,${.sh.version}
;$ZSH_VERSION
.En ce qui concerne les variables, j'ai l'impression qu'il vous manque des modules et des fichiers de modules [1]. Une fois que vous commencez à le faire, il sera facile de créer des profils communs pour différents shells (y compris bash & zsh), python, perl et encore plus d'environnements, le tout à partir d'un fichier de module unique.
Il est également possible de définir des alias de la même manière; cependant, vous constaterez rapidement que les alias ne sont pas très bien hérités entre les shells successifs et peuvent nécessiter des solutions de contournement.
[1] http://en.wikipedia.org/wiki/Environment_Modules_(software)
la source