Jak uniknąć konieczności wielokrotnego wydawania „y” podczas usuwania chronionego pliku

52

Szukam rozwiązania, które będzie używane jako odpowiedź na „rm: usunąć zwykły plik chroniony przed zapisem [x]?”

Kilkakrotnie myślałem o wydaniu postaci, a następnie powrotu karetki, w języku bashrc. Jak to zrobimy?

Iancovici
źródło
Możesz zdefiniować funkcję. Ten thrad może pomóc: stackoverflow.com/questions/756756/... .
alpert
Dlaczego chcesz to zrobić? W każdym razie bardzo nieoczywistym zadaniem jest drukowanie zwrotów karetki (w przeciwieństwie do znaków nowej linii), a także w .bashrc?
l0b0 18.04.13
@ l0b0 pytanie zredagowane, by było bardziej szczegółowe
Iancovici
Dlaczego chcesz usunąć pliki w .bashrc? Oryginalne zadanie wciąż nie jest jasne.
l0b0 18.04.13
3
@echadromani Na SO / SE bardzo często próbuje się zrozumieć pierwotny problem, aby zapewnić optymalne rozwiązanie, które może mieć zastosowanie w innych sytuacjach.
l0b0 18.04.13

Odpowiedzi:

75

Edytuj na podstawie zaktualizowanego pytania:

Aby uniknąć pytania o usunięcie plików, dodaj -fopcję („force”):

rm -f /path/to/file

Ma to jeden efekt uboczny, o którym powinieneś wiedzieć: Jeśli którakolwiek z podanych ścieżek nie istnieje, nie zgłosi tego i powróci pomyślnie:

$ rm -f /nonexistent/path
$ echo $?
0

Oryginalna odpowiedź:

Oto jedno proste rozwiązanie:

yes "$string" | head -n $number | tr $'\n' $'\r'

yespowtarza nieskończony ciąg znaków, rozdzielając go znakami nowej linii. headzatrzymuje go po $numberraz trkolejny i tłumaczy znaki nowej linii na zwroty karetki. Możesz nie zobaczyć żadnego wyniku z powodu powrotu karetki, ale przekazanie go do tego polecenia (in bash) powinno to zilustrować:

printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"

Użytkownicy bez bashrura może wynik do od, hexdumplub xxdaby zobaczyć rzeczywiste postacie zwrócone.

10b0
źródło
7

Innym problemem, na który natrafiam od czasu do czasu, rmjest alias rm -i, coś takiego w / etc / bashrc:

alias rm='rm -i'

W takim przypadku możesz albo unalias rmskorzystać z tej sztuczki, którą znalazłem przed laty, wstawić odwrotny ukośnik przed poleceniem, które zostało aliowane, aby zignorować alias tylko jeden raz, na przykład:

\rm somefile

Więcej informacji na temat aliasów można znaleźć w artykule w Nixcraft .

slm
źródło
5

rmjest na stałe proszony „interaktywnie” (monit o oczekiwanie na dane wejściowe użytkownika) o zapisywanie chronionych plików. istnieją dwie metody, aby zapobiec rmpytaniu:

rm -rf somedir

i

rm -r --interactive=never somedir

(oba działają również bez -rusuwania plików zamiast katalogów)

wyjaśnienie:

-fsprawia, rmże „ignoruj ​​nieistniejące pliki i argumenty, nigdy nie pytaj”.

--interactive=neverrobi to, co mówi: nigdy nie bądź interaktywny. innymi słowy: nigdy nie pytaj.

różnica między -fi --interactive=neverjest tą częścią: „zignoruj ​​nieistniejące pliki i argumenty”.

porównać:

$ rm -rf nonexistingname
$ echo $?
0

i

$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1

różnica jest szczególnie interesująca podczas pisania skryptów, w których nigdy nie chcesz rmbyć interaktywny, ale nadal chcesz obsługiwać błędy.

Podsumowanie: w użyciu w wierszu poleceń rm -rf. w użyciu skryptów rm -r --interactive=never.


odpowiedź na zadane pytanie („Jak uniknąć konieczności wielokrotnego wydawania„ y ”podczas usuwania chronionego pliku”) patrz https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line / 338860 # 338860

lesmana
źródło
1

po prostu daj tak wszystkim swoim poleceniom!

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

W każdym razie zawsze możesz wymusić, używając -f:

rm -r -f /path
Nakamoto
źródło
-2

Ja też wpadłem na ten sam problem. Powyższa odpowiedź dotyczy tylko jednego pliku, ale jeśli chcesz zignorować wiele „tak”.

Możesz użyć

sudo rm -r /path/to/directory

aby usunąć wszystkie zwykłe pliki chronione przed zapisem

Gopal Prasad
źródło
Jest to nieuwzględnione, ponieważ usuwa cały katalog. Prawdopodobnie OP chce tylko usunąć dany plik, a nie każdy pojedynczy plik w tym samym poddrzewie katalogu.
Jake
Hej .... Może masz rację.
Gopal Prasad
Hej .... Może masz rację. Ale nie w tym przypadku .. Jak gdyby użytkownik miał dużo cierpliwości i czasu, to miał również czas, aby dać „tak” kilka razy ... Zakładałem, że chce usunąć cały plik za pomocą jednego polecenia. Jak napisać chroniony plik zawsze pyta o potwierdzenie przed usunięciem tego typu pliku. Jednym z takich przykładów jest tworzenie virtualenv, a później chcesz usunąć go w pythonie. Spróbuj, a znajdziesz polecenie rm z prośbą o potwierdzenie i za każdym razem musisz udzielić odpowiedzi. Rozwiązałem sytuację w ten sposób.
Gopal Prasad