Ошибка в настоящее время находится в версии 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
Отметьте это ~
и *
расширены оболочкой прежде, чем передать аргументы rm
.
Единственный способ сделать это состоит в том, чтобы определить названную функцию rm
это анализирует аргументы перед вызовом command rm ...
Я не рекомендовал бы это. Когда Вы становитесь ленивыми, Вы входите в проблему, когда Вы сидите в некотором другом компьютере без Ваших самозащит. Я привык для alias rm="rm -i"
прежде чем это укусило меня.
Не уверенный, если существует ответ на это, но одна вещь, я делаю в своем .bashrc, должен установить GLOBIGNORE=.:..
, это мешает расширениям шарика соответствовать .
и ..
. Это также эффективно включает dotglob
который не мог бы быть тем, что Вы хотите (GLOBIGNORE=.:..:.*
остановки это). Я нахожу это полезным для меня.
С последними версиями 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 прекращать функционировать правильно, когда задание было приостановлено.
emacs -nw
. Приостановите emacs C-z
и тип: никакой видимый вывод. Вернитесь к emacs fg
и выход emacs. Назад при подсказке, независимо от того, что Вы вводите, невидимо.
– grebneke
06.03.2014, 19:17
\<rm\>
- почему не просто rm
? Что \<\>
и где они документируются? Попробованный ДО документы, но не может найти объяснение.
– grebneke
06.03.2014, 19:22
\<\>
, это - Расширение GNU, соответствуя пустой строке вначале и концу слова, соответственно.
– grebneke
06.03.2014, 21:08
bash
. Привязка внешней команды к ^M
(как bind -x '"\C-m": /bin/true'
) достаточно должен инициировать его (используйте Ctrl+J для принятия строки, как мы делаем в нашем TIOCSTI ioctl).
– Stéphane Chazelas
06.03.2014, 22:54
\<\>
больше расширения BSD (уже был в ex
в конце 70-х). Это никогда не добиралось до POSIX основные регулярные выражения. Но был в GNU regexps некоторое время если не начало. удар является оболочкой GNU, но я думаю, что это пользуется regex библиотекой системы для своего regexps, таким образом, это не может работать над non-GNU/BSD системами.
– Stéphane Chazelas
14.04.2016, 11:34
alias rm="rm -I"
является более разрешающим, чем-i
, Я использую это. Я думаю, что подобные псевдонимы необходимы для предотвращения этих ошибок, не мудрый для записи команд, которые Вы знаете, полагаются на это поведение все же. – Graeme 11.01.2014, 00:10/home/glenn
, нет~
, список файлов, нет*
) – Stéphane Chazelas 11.01.2014, 11:47