Cette fonction existe dans l'un des ~ / .bashrc de mes utilisateurs:
function rm()
{
ls $*
echo "rm?"
read ans
if [ "$ans" == 'y' ]; then
/bin/rm $*
fi
}
Dans mon script ksh que les utilisateurs doivent exécuter, j'ai une ligne comme celle-ci:
[[ "$KEEP" = "" ]] && \rm $FILE
Bien que la barre oblique inverse échappe aux alias définis par l'utilisateur, elle n'empêche pas le script d'exécuter des fonctions définies par l'utilisateur portant le même nom. Par conséquent, la fonction rm () de mon utilisateur est appelée à la place de la fonction système.
J'ai trouvé cette question et réponse de superutilisateur, mais la résolution ne s'applique qu'à une fonction intégrée, pas à une commande système.
Quel est le meilleur moyen de faire en sorte que la commande rm ne soit pas appelée, et non un alias ou une fonction? Dois-je spécifier le chemin d'accès complet à rm et chaque commande système que je veux m'assurer est exécutée correctement? Y a-t-il une meilleure façon?
env
voie. De plus, vous pouvez déterminer l'emplacement de chaque outil une fois et le stocker dans une variable, par exempleRM=$( /usr/bin/env which rm ); [much more code]; $RM some_file;
. Vous pouvez également modifier la façon dont votre script est exécuté. Habituellement, les fonctions et les alias ne sont pas hérités, sinon ils casseraient les scripts tout le temps.