Эта функция существует в одном из моих пользователей ~ / .bashrc:
function rm()
{
ls $*
echo "rm?"
read ans
if [ "$ans" == 'y' ]; then
/bin/rm $*
fi
}
В моем сценарии ksh, который требуется запускать пользователям, у меня есть такая строка:
[[ "$KEEP" = "" ]] && \rm $FILE
Хотя обратная косая черта экранирует пользовательские псевдонимы, она не мешает сценарию запускать пользовательские функции с тем же именем. В результате моя системная функция rm () вызывается вместо системной функции.
Я нашел этот вопрос и ответ суперпользователя, но разрешение относится только к встроенной функции, а не к системной команде.
Как лучше всего принудительно вызывать команду rm, а не псевдоним или функцию? Должен ли я указать полный путь к rm, и каждая системная команда, которую я хочу гарантировать, выполняется правильно? Есть ли способ лучше?
env
пути. Кроме того, вы можете определить местоположение каждого инструмента один раз и сохранить его в переменной, напримерRM=$( /usr/bin/env which rm ); [much more code]; $RM some_file;
. Вы также можете изменить способ выполнения сценария. Обычно функции и псевдонимы не наследуются, иначе они будут постоянно нарушать работу сценариев.