Ta funkcja istnieje w ~ / .bashrc jednego z moich użytkowników:
function rm()
{
ls $*
echo "rm?"
read ans
if [ "$ans" == 'y' ]; then
/bin/rm $*
fi
}
W moim skrypcie ksh, który muszą uruchomić użytkownicy, mam taką linię:
[[ "$KEEP" = "" ]] && \rm $FILE
Chociaż ukośnik odwraca aliasy zdefiniowane przez użytkownika, nie powstrzymuje skryptu przed uruchamianiem funkcji zdefiniowanych przez użytkownika o tej samej nazwie. W rezultacie zamiast funkcji systemowej wywoływana jest funkcja rm () mojego użytkownika.
Znalazłem to pytanie administratora pytanie i odpowiedź, ale rozdzielczość odnosi się tylko do funkcji wbudowanej, a nie polecenia systemu.
Co najlepiej wymusić wywołanie polecenia rm, a nie alias lub funkcję? Czy muszę podać pełną ścieżkę do rm i każdą komendę systemową, którą chcę zapewnić, aby została wykonana poprawnie? Czy jest lepszy sposób?
env
trasę. Dodatkowo możesz określić lokalizację każdego narzędzia raz i zapisać je w zmiennej, npRM=$( /usr/bin/env which rm ); [much more code]; $RM some_file;
. Możesz także zmienić sposób wykonywania skryptu. Zwykle funkcje i aliasy nie są dziedziczone, w przeciwnym razie cały czas łamałyby skrypty.