Включить подтверждение для команды rm с флажком силы


0

Есть ли возможность включить подтверждение для 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 } 

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

Ответы:


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 ~]#
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.