Я ищу решение, которое будет использоваться в ответ на "rm: удалить обычный файл с защитой от записи [x]?"
Я думал о выдаче персонажа с последующим возвратом каретки несколько раз, в bashrc. Как мы это делаем?
Я ищу решение, которое будет использоваться в ответ на "rm: удалить обычный файл с защитой от записи [x]?"
Я думал о выдаче персонажа с последующим возвратом каретки несколько раз, в bashrc. Как мы это делаем?
Ответы:
Изменить на основе обновленного вопроса:
Чтобы вас не спрашивали об удалении файлов, добавьте параметр -f
(«force»):
rm -f /path/to/file
Это имеет один побочный эффект, о котором вы должны знать: если какой-либо из указанных путей не существует, он не сообщит об этом и вернется успешно:
$ rm -f /nonexistent/path
$ echo $?
0
Оригинальный ответ:
Вот одно простое решение:
yes "$string" | head -n $number | tr $'\n' $'\r'
yes
повторяет любую строку, которую вы ей даете, бесконечно, разделенные символами новой строки. head
останавливает его через $number
раз и tr
переводит переводы строк в возврат каретки. Вы можете не увидеть никаких выходных данных из-за возвратов каретки, но передача их этой команде (in bash
) должна проиллюстрировать это:
printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"
Пользователи , не имеющие bash
консервной трубы, чтобы результат od
, hexdump
или , xxd
чтобы увидеть фактические символы , возвращаемые.
Другая проблема, с которой я сталкиваюсь время от времени, rm
связана с псевдонимом rm -i
, что-то вроде этого в / etc / bashrc:
alias rm='rm -i'
В этом случае вы можете unalias rm
или можете использовать этот трюк, который я обнаружил много лет назад, поставить обратную косую черту перед командой с псевдонимом, чтобы игнорировать псевдоним только один раз, например:
\rm somefile
Вы можете узнать больше об псевдонимах через статью в Nixcraft .
rm
жестко задан вопрос «интерактивно» (запрос на ожидание ввода пользователя) для файлов, защищенных от записи. Есть два способа, чтобы не rm
задавать вопросы:
rm -rf somedir
а также
rm -r --interactive=never somedir
(оба также работают без -r
удаления файлов вместо директорий)
объяснение:
-f
заставляет rm
"игнорировать несуществующие файлы и аргументы, никогда не запрашивать".
--interactive=never
делает то, что говорит: никогда не быть интерактивным. другими словами: никогда не подскажу.
Разница между -f
и --interactive=never
заключается в этой части: «игнорировать несуществующие файлы и аргументы».
Для сравнения:
$ rm -rf nonexistingname
$ echo $?
0
а также
$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1
Разница в основном интересна при написании сценариев, в которых вы никогда не хотите rm
быть интерактивными, но все же хотите обрабатывать ошибки.
резюме: по командной строке rm -rf
. в скриптах используй rm -r --interactive=never
.
для ответа на поставленный вопрос («Как избежать необходимости несколько раз вводить« y »при удалении защищенного файла») см. https://askubuntu.com/questions/338857/automatics-enter-input-in-command-line. / 338860 # 338860
Я тоже столкнулся с той же проблемой. Приведенный выше ответ только для одного файла, но если вы хотите игнорировать много да.
Вы можете использовать
sudo rm -r /path/to/directory
удалить все защищенные от записи обычные файлы