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?
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?
Odpowiedzi:
Edytuj na podstawie zaktualizowanego pytania:
Aby uniknąć pytania o usunięcie plików, dodaj -f
opcję („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'
yes
powtarza nieskończony ciąg znaków, rozdzielając go znakami nowej linii. head
zatrzymuje go po $number
raz tr
kolejny 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 bash
rura może wynik do od
, hexdump
lub xxd
aby zobaczyć rzeczywiste postacie zwrócone.
Innym problemem, na który natrafiam od czasu do czasu, rm
jest alias rm -i
, coś takiego w / etc / bashrc:
alias rm='rm -i'
W takim przypadku możesz albo unalias rm
skorzystać 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 .
rm
jest na stałe proszony „interaktywnie” (monit o oczekiwanie na dane wejściowe użytkownika) o zapisywanie chronionych plików. istnieją dwie metody, aby zapobiec rm
pytaniu:
rm -rf somedir
i
rm -r --interactive=never somedir
(oba działają również bez -r
usuwania plików zamiast katalogów)
wyjaśnienie:
-f
sprawia, rm
że „ignoruj nieistniejące pliki i argumenty, nigdy nie pytaj”.
--interactive=never
robi to, co mówi: nigdy nie bądź interaktywny. innymi słowy: nigdy nie pytaj.
różnica między -f
i --interactive=never
jest 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 rm
być 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
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