Aliase werden nicht vererbt. Deshalb werden sie traditionell in bashrc
gesetzt und nicht profile
. Geben Sie Ihre script.sh
an von Ihrem .bashrc
oder stattdessen die systemweite.
Wenn Sie möchten, dass sie an Sub-Shells vererbt werden, verwenden Sie stattdessen Funktionen. Diese können in die Umgebung exportiert werden (export -f
), und Sub-Shells haben dann diese Funktionen definiert.
Also, für eines Ihrer Beispiele:
rmvr() { rm -rv "[email protected]"; }
export -f rmvr
Wenn Sie viele davon haben, stellen Sie zuerst den Export ein:
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
Das liegt daran, dass /etc/profile.d/ nur von der interaktiven Login-Shell verwendet wird. Allerdings /etc/bash.bashrc
wird von der interaktiven Non-Login-Shell verwendet.
Da ich normalerweise einige globale Aliase für das System setze, habe ich begonnen, /etc/bashrc.d
zu erstellen wo ich eine Datei mit einigen globalen Aliasnamen ablegen kann:
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