Як уникнути необхідності видавати "y" кілька разів під час видалення захищеного файлу


52

Я шукаю рішення, яке використовуватиметься як відповідь на "rm: видалити звичайний файл, захищений від запису [x]?"

Я думав видавати персонажа, після якого повертався вагон протягом декількох разів, у башерку. Як ми це робимо?


Ви можете визначити функцію. Це thrad може допомогти вам: stackoverflow.com/questions/756756 / ... .
alpert

Чому ти хочеш це робити? Дуже неочевидне завдання бажати друкувати повернення каретки (на відміну від нових рядків) у будь-якому випадку, і в .bashrc?
l0b0

@ l0b0 запитання відредаговано, щоб бути більш конкретним
Iancovici

Чому ви хочете видалити файли в .bashrc? Початкове завдання досі не зрозуміло.
l0b0

3
@echadromani Дуже часто в SO / SE намагаються зрозуміти оригінальну проблему, щоб забезпечити оптимальне рішення, яке може бути застосовно до інших ситуацій.
l0b0

Відповіді:


75

Редагувати на основі оновленого запитання:

Щоб вас не запитали про видалення файлів, додайте параметр -f("сила"):

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побачити реальні персонажі повертаються.


7

Інша проблема, з якою я стикався час від часу, - це те, що я rmвідчуваю rm -iщось подібне в / etc / bashrc:

alias rm='rm -i'

У такому випадку ви можете unalias rmабо використати цю хитрість, яку я дізнався років тому, поставити зворотній косу рису перед командою, яка була псевдонімом, щоб ігнорувати псевдонім лише один раз, наприклад:

\rm somefile

Ви можете дізнатися більше про псевдоніми у статті в Nixcraft .


5

rmважко кодувати запитувати "інтерактивно" (оперативне очікування введення користувача) на захищені від запису файли. Є два способи запобігти rmзапиту:

rm -rf somedir

і

rm -r --interactive=never somedir

(обидва також працюють без -rвидалення файлів замість dirs)

пояснення:

-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/automatically-enter-input-in-command-line / 338860 # 338860


1

просто дайте так всім своїм командам!

yes | rm -r /path/
yes | <command>

У будь-якому випадку ви завжди можете використовувати -f:

rm -r -f /path

-2

Я теж натрапив на те саме питання. Наведена вище відповідь стосується лише одного файлу, але якщо ви хочете ігнорувати багато так.

Можна використовувати

sudo rm -r /path/to/directory

щоб видалити всі звичайні файли, захищені від запису


Це знижується, оскільки він видаляє весь каталог. Імовірно, OP хоче лише видалити відповідний файл, а не кожен окремий файл в одному піддіреві каталогів.
Джейк

Гей .... Можливо, ти маєш рацію.
Гопал Прасад

Гей .... Можливо, ти маєш рацію. Але не в цьому випадку .. Як якщо у користувача багато терпіння і часу, то він також встигає кілька разів дати "так" ... Я припустив, що він хоче видалити весь файл однією командою .. Як написати захищений файл завжди вимагає підтвердження перед тим, як видаляти файл цього типу. Один із таких прикладів є у випадку, коли ви створюєте virtualenv і пізніше ви хочете видалити в python. Будь ласка, спробуйте, і ви знайдете команду rm із запитом підтвердження та кожного разу Ви повинні надати відповідь .. Я вирішив ситуацію таким чином.
Гопал Прасад
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.