Предотвращение удаления системы/оболочки исказило папки

Ошибка в настоящее время находится в версии 5.21 byobu на официальной Ubuntu repos. В byobu PPA версия 5.22 не выходит за край цвета направо больше. Все еще никакой ответ на {-} проблема.

Процедура:

sudo add-apt-repository ppa:byobu/ppa
sudo apt-get update
sudo apt-get install byobu
1
10.01.2014, 23:51
3 ответа

Отметьте это ~ и * расширены оболочкой прежде, чем передать аргументы rm.

Единственный способ сделать это состоит в том, чтобы определить названную функцию rm это анализирует аргументы перед вызовом command rm ...

Я не рекомендовал бы это. Когда Вы становитесь ленивыми, Вы входите в проблему, когда Вы сидите в некотором другом компьютере без Ваших самозащит. Я привык для alias rm="rm -i" прежде чем это укусило меня.

3
27.01.2020, 23:13
  • 1
    alias rm="rm -I" является более разрешающим, чем -i, Я использую это. Я думаю, что подобные псевдонимы необходимы для предотвращения этих ошибок, не мудрый для записи команд, которые Вы знаете, полагаются на это поведение все же. –  Graeme 11.01.2014, 00:10
  • 2
    При определении функции та функция будет видеть результат расширения (/home/glenn, нет ~, список файлов, нет *) –  Stéphane Chazelas 11.01.2014, 11:47

Не уверенный, если существует ответ на это, но одна вещь, я делаю в своем .bashrc, должен установить GLOBIGNORE=.:.., это мешает расширениям шарика соответствовать . и ... Это также эффективно включает dotglob который не мог бы быть тем, что Вы хотите (GLOBIGNORE=.:..:.* остановки это). Я нахожу это полезным для меня.

2
27.01.2020, 23:13

С последними версиями bash:

typetext() {
  perl -le 'require "sys/ioctl.ph";
    ioctl(STDIN, &TIOCSTI, $_) for split "", join " ", @ARGV' "$@"
}
checkrm() {
  local re='\<rm\>.*[[:blank:]]([.*~]|\.\.)([[:blank:]]|$)'
  if [[ $READLINE_LINE =~ $re ]]; then
    printf > /dev/tty "Are you sure? "
    read -n1 k
    echo
    if [[ $k != [yY] ]]; then
      READLINE_LINE=
      return
    fi
  fi
  typetext $'\n'
}  <> /dev/tty >&0
bind -x '"\C-m": checkrm'

В основном, на нажатие Return, наш checkrm функция вызывается.

Это смотрит в в настоящее время вводимой командной строке ($READLINE_LINE за который Вы должны колотить 4.3 или более новый) для a rm слово (также соответствия /bin/rm, но не в rmdir) сопровождаемый a *, ., ~ или .. аргумент.

Если это соответствует, это предлагает пользователю подтверждение. Если подтверждено, символ новой строки вставляется в tty входной буфер для команды, которая будет принята (и CR и LF, обязаны принять строку, мы только переносим CR); в противном случае текущий буфер освобожден.

Отметьте это с версиями bash до 4,4, был удар ошибки, которая заставила readline прекращать функционировать правильно, когда задание было приостановлено.

2
27.01.2020, 23:13
  • 1
    1. Вышеупомянутое загрузки в удар. Запустить emacs -nw. Приостановите emacs C-z и тип: никакой видимый вывод. Вернитесь к emacs fg и выход emacs. Назад при подсказке, независимо от того, что Вы вводите, невидимо. –  grebneke 06.03.2014, 19:17
  • 2
    2. Мне нелегко понимать \<rm\> - почему не просто rm? Что \<\> и где они документируются? Попробованный ДО документы, но не может найти объяснение. –  grebneke 06.03.2014, 19:22
  • 3
    Найденный им: относительно \<\>, это - Расширение GNU, соответствуя пустой строке вначале и концу слова, соответственно. –  grebneke 06.03.2014, 21:08
  • 4
    @grebneke, я могу воспроизвести Ваш 1 выше, и он похож на ошибку в bash. Привязка внешней команды к ^M (как bind -x '"\C-m": /bin/true') достаточно должен инициировать его (используйте Ctrl+J для принятия строки, как мы делаем в нашем TIOCSTI ioctl). –  Stéphane Chazelas 06.03.2014, 22:54
  • 5
    @grebneke, технически, \<\> больше расширения BSD (уже был в ex в конце 70-х). Это никогда не добиралось до POSIX основные регулярные выражения. Но был в GNU regexps некоторое время если не начало. удар является оболочкой GNU, но я думаю, что это пользуется regex библиотекой системы для своего regexps, таким образом, это не может работать над non-GNU/BSD системами. –  Stéphane Chazelas 14.04.2016, 11:34

Теги

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