Diese Funktion existiert in einem der ~ / .bashrc meiner Benutzer:
function rm()
{
ls $*
echo "rm?"
read ans
if [ "$ans" == 'y' ]; then
/bin/rm $*
fi
}
In meinem ksh-Skript, das Benutzer ausführen müssen, habe ich eine Zeile wie die folgende:
[[ "$KEEP" = "" ]] && \rm $FILE
Während der umgekehrte Schrägstrich benutzerdefinierte Aliase übergeht, wird das Skript nicht daran gehindert, benutzerdefinierte Funktionen mit demselben Namen auszuführen. Infolgedessen wird die Funktion rm () meines Benutzers anstelle der Systemfunktion aufgerufen.
Ich habe diese Superuser-Frage, Frage & Antwort, gefunden, aber die Auflösung bezieht sich nur auf eine eingebaute Funktion, nicht auf einen Systembefehl.
Was ist das Beste, um den Aufruf des Befehls rm zu erzwingen und nicht einen Alias oder eine Funktion? Muss ich den vollständigen Pfad zu rm und jeden Systembefehl angeben, der ordnungsgemäß ausgeführt werden soll? Gibt es einen besseren Weg?
env
Strecke gehen . Zusätzlich können Sie die Position jedes Werkzeugs einmal bestimmen und in einer Variablen speichern, zRM=$( /usr/bin/env which rm ); [much more code]; $RM some_file;
. Sie können auch ändern, wie Ihr Skript ausgeführt wird. Normalerweise werden Funktionen und Aliase nicht vererbt, da sie sonst die ganze Zeit über Skripte unterbrechen würden.