Gli alias non vengono ereditati. Ecco perché sono tradizionalmente impostati in bashrc
e non profile
. Procurati il tuo script.sh
dal tuo .bashrc
o invece quello a livello di sistema.
Se vuoi che vengano ereditati in sub-shell, usa invece le funzioni. Questi possono essere esportati nell'ambiente (export -f
), e le sub-shell avranno quindi quelle funzioni definite.
Quindi, per uno dei tuoi esempi:
rmvr() { rm -rv "[email protected]"; }
export -f rmvr
Se ne hai molti, imposta prima l'esportazione:
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
È perché /etc/profile.d/ è usato solo dalla shell di login interattiva. Tuttavia, /etc/bash.bashrc
è usato dalla shell interattiva non di login.
Poiché di solito imposto alcuni alias globali per il sistema, ho iniziato a creare /etc/bashrc.d
dove posso rilasciare un file con alcuni alias globali:
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