Если возможно Ваш менеджер окон (Compiz, возможно?) или декоратор окна (возможно Emerald) использует необычный эффект как альфа-размытость, которая могла бы вызвать эту проблему.
rm -i
читает его ответ из стандартного входа, который он наследовал от while
цикл. Так строка текста от list.txt
используется в качестве ответа на, "действительно удаляют?" вопрос. Для фиксации необходимо будет разделить два источника входа. Самый легкий путь состоит в том, чтобы иметь read
возьмите его вход от отдельного дескриптора файла:
while IFS= read <&3 -r i; do
rm -i -- "$i" # Quote the file name, not just to be safe,
# but because it's the right syntax.
done 3< list.txt
Вы больше не перенаправляете стандартный вход (fd 0) для цикла с условием продолжения, таким образом, rm
будет читать из терминала, как желаемый.
С другой стороны, Вы, возможно, сделали:
IFS=$'\n' # set field separator to newline
set -f # disable globbing upon command substitution
rm -i -- $(cat list.txt)
Или, с GNU xargs:
xargs -rd '\n' --arg-file=list.txt rm -i --
Для чего-то немного более необычного, чем ответ на да или не в каждый файл, Вы могли использовать iselect
для интерактивного находящегося в ncurses выбора. например.
iselect -a -m < list.txt | xargs -d '\n' -r echo rm
или позволить выбор файлов в текущем dir:
find . -maxdepth 1 -type f | iselect -a -m | xargs -d '\n' -r echo rm
Это отобразит полный экран (полный терминал) находящийся в ncurses список, где файлы могут быть выбраны и невыбранными по желанию путем нажатия SPACE. нажмите ENTER для принятия выборов (выбранные записи будут распечатаны на stdout), или q
выходить (ничто распечатанное к stdout).пресса h
для справки.
Отметьте echo rm
- я записал это как этот для тестирования. измените его на просто rm
после того как Вы уверены, что понимаете то, что это делает.
Также отметьте это xargs
используется здесь с \n
как входной разделитель. Это не будет работать, если какие-либо из имен файлов будут иметь символы перевода строки в них. В этом отношении, iselect
не будет работать правильно ни один - это ожидает один объект на строку - u nfortunately, iselect
не имеет опции для завершенного пустым указателем ввода или вывода.
iselect
упаковывается для debian, вероятно, человечность и другие дистрибутивы также. домашняя страница по http://www.ossp.org/pkg/tool/iselect/
y
, предыдущий файл был бы удален? – Francesco Turco 02.10.2012, 20:52y
, но любое начало имениy
. По-видимому,rm
просто смотрят первый символ любого ответа, который он получает: 'y' да, что-либо еще нет. – chepner 02.10.2012, 20:57