Есть ли возможность включить подтверждение для rm -rf. У нас была настройка псевдонима для rm = rm -i, поэтому всякий раз, когда мы удаляем файл, он запрашивает подтверждение, но когда указан флаг -f, он не запрашивает подтверждение.

Так есть ли возможность запросить подтверждение для команды rm (или rm -r) с флагом принудительной установки, которая предназначена для команд rm -f и rm -rf?

В файле .bashrc попытался настроить псевдоним как

alias 'rm -rf'='rm -rfi'

но это не работает. Ссылаясь на этот URL : я пытался создать функцию как

function rm () 
{ if [[ $@ == "-rf" ]]; 
then command rm -rfi 
else command rm "$@" 
fi } 

но это тоже не работает. Может кто-нибудь, пожалуйста, помогите мне исправить это.

3 ответа3

0

Вы можете исправить это, удалив опцию -f .

`-i` means interactive.
`-f` means force everything. That includes no confirmation.

Процитируем часть man rm в моей собственной системе (нет установки RedHat для предприятий, но достаточно близко):

-f      Attempt to remove the files without prompting for confirmation,
        regardless of the file's permissions.  If the file does not
        exist, do not display a diagnostic message or modify the exit
        status to reflect an error.  The -f option overrides any previous
        -i options.

Последняя строка отвечает на ваш вопрос.

0

Вы задали тот же вопрос и получили ответ здесь. Это не будет работать из коробки! Вам нужна какая-то обертка.

0

Исправлена ошибка запроса подтверждения команды rm с флагом -f. Проверены различные случаи удаления и работает.

Вы можете добавить следующий скрипт в файл .bashrc.

rm() {
     if [[ $* == -rf* ]]; then
           shift 1;
           command rm -rfi "$@" | more
     elif [[ ${@: -1} == -rf* ]]; then
           command rm "$@" -rfi | more
    else
           command rm -i "$@"
    fi
}

Пожалуйста, убедитесь, что псевдоним для rm не установлен, иначе при выполнении исходного кода .bashrc мы получим ошибку.

Это работает, когда мы задаем -rf как для первого, так и для последнего, как показано ниже, а также для файлов (поэтому не требуется псевдоним rm = rm-i)

[root@localhost ~]# mkdir test
[root@localhost ~]# rm -rf test
rm: remove directory ‘test’? 
[root@localhost ~]# rm test -rf
rm: remove directory ‘test’? 
[root@localhost ~]#

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .