Les alias ne sont pas hérités. C'est pourquoi ils sont traditionnellement définis dans bashrc
et non profile
. Sourcez votre script.sh
depuis votre .bashrc
ou celui à l'échelle du système à la place.
Si vous voulez qu'ils soient hérités des sous-shells, utilisez plutôt des fonctions. Ceux-ci peuvent être exportés vers l'environnement (export -f
), et les sous-shells auront alors ces fonctions définies.
Donc, pour l'un de vos exemples :
rmvr() { rm -rv "[email protected]"; }
export -f rmvr
Si vous en avez plusieurs, configurez-les d'abord pour l'exportation :
set -a # export the following funcs
rmvr() { rm -rv "[email protected]"; }
cpvr() { cp -rv "[email protected]"; }
mvrv() { mv -rv "[email protected]"; }
set +a # stop exporting
C'est parce que /etc/profile.d/ est utilisé uniquement par le shell de connexion interactif. Cependant, /etc/bash.bashrc
est utilisé par le shell interactif sans connexion.
Comme je définis habituellement des alias globaux pour le système, j'ai commencé à créer /etc/bashrc.d
où je peux déposer un fichier avec des alias globaux :
HAVE_BASHRC_D=`cat /etc/bash.bashrc | grep -F '/etc/bashrc.d' | wc -l`
if [ ! -d /etc/bashrc.d ]; then
mkdir -p /etc/bashrc.d
fi
if [ "$HAVE_BASHRC_D" == "0" ]; then
echo "Setting up bash aliases"
(cat <<-'EOF'
if [ -d /etc/bashrc.d ]; then
for i in /etc/bashrc.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
EOF
) >> /etc/bash.bashrc
fi