Сценарии 'комнаты' и 'комнаты-i'

Необходимо установить ntfs-3g от EPEL сначала.

3
24.09.2013, 00:07
3 ответа

Функция, данная в ответе @Tim, будет работать над любым системным ударом выполнения. Однако GNU rm уже имеет опцию для того, в чем Вы нуждаетесь (от man rm):

   -I     prompt  once  before  removing more than three
          files, or  when  removing  recursively.   Less
          intrusive  than -i, while still giving protec‐
          tion against most mistakes

Так, если у Вас есть GNU rm (который Вы должны при выполнении Linux), все, в чем Вы нуждаетесь, должна добавить эта строка к Вашему /.bashrc:

alias rm='rm -I'

Это запросит прежде, чем удалить больше чем 3 файла, но это не попросит подтверждение для каждого файла, если Вы подтвердите действие, то все файлы будут удалены.

15
27.01.2020, 21:07

Это работает на меня, добавьте эти строки к Вашему ~/.bashrc:

rm() {
   if [ "$#" -ge 3 ]; then
        command rm -i "$@"
   else
        command rm "$@"
   fi
}

Это сделает rm функция, которая будет вызвана вместо /bin/rm каждый раз Вы выполняетесь rm.

"$#" расширяется до количества переданных аргументов.

8
27.01.2020, 21:07
  • 1
    я поместил это в bashrc и запустил терминал, он дал мне ошибку что [0 Команд, не найденных комнатой: недостающий операнд –  user2805361 24.09.2013, 00:00
  • 2
    @user2805361 Вы копировали тот код точно? Ошибка является странной (сделал Вас вставка копии это?), но похоже, что Вы записали [$# вместо [ $# (пропускающий пространство). Также этот код разработан для использования в сценарии или в функции. –  Gilles 'SO- stop being evil' 24.09.2013, 00:12
  • 3
    я попробовал редактирование все еще та же ошибка, когда я запускаю новый терминал. и да кодируют, точно, я могу использовать тот же код в .bashrc хотя? –  user2805361 24.09.2013, 00:13
  • 4
    @user2805361 Как Gilles сказал, если Вы хотите вставить это Ваш .bashrc, необходимо превратить его в функцию. Попытайтесь перенести этот точный код в rm () { ... }. –  Joseph R. 24.09.2013, 00:15
  • 5
    @Tim Ваш ответ хорошо работает с шаблоном шарика: оболочка должна развернуть шарик прежде на самом деле назвать команду/функцию/сценарий... –  Joseph R. 24.09.2013, 00:23

Вот краткий, но все еще переносимый способ сделать это:

rm() {
  command rm $([ ${#} -gt 3 ] && echo \-i) "$@"
}

Однако я бы рекомендовал избегать изменения семантики rm, подробности см. в этом ответе.

1
27.01.2020, 21:07

Теги

Похожие вопросы