Aliasy se nedědí. Proto jsou tradičně nastaveny v bashrc
a ne profile
. Zdroj script.sh
z vašeho .bashrc
nebo místo toho celosystémový.
Pokud chcete, aby byly zděděny do podsložek, použijte místo toho funkce. Ty lze exportovat do prostředí (export -f
) a sub-shelly pak budou mít tyto funkce definované.
Takže pro jeden z vašich příkladů:
rmvr() { rm -rv "[email protected]"; }
export -f rmvr
Pokud jich máte hodně, pak nejprve nastavte export:
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
Je to proto, že /etc/profile.d/ používá pouze interaktivní přihlašovací shell. Nicméně /etc/bash.bashrc
je používán interaktivním nepřihlašovacím shellem.
Jak obvykle nastavuji nějaké globální aliasy pro systém, začal jsem vytvářet /etc/bashrc.d
kde mohu vypustit soubor s některými globálními aliasy:
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