Jak mogę usunąć plik bez pytania użytkownika, czy zgadza się on usunąć plik? Piszę skrypt powłoki i używam funkcji rm, ale pojawia się pytanie „usunąć zwykły plik?” i naprawdę tego nie potrzebuję. Dziękuję Ci.
rmnie wyświetla się komunikat „usunąć zwykły plik?” monit domyślnie. Musisz mieć to aliasy rm -ilub zdefiniować jako funkcję. Dziwi mnie, że alias jest widoczny w twoim skrypcie. Czy wykonujesz skrypt ( ./foo.sh) czy pozyskujesz go ( . foo.shlub source foo.sh)?
Keith Thompson,
Odpowiedzi:
102
Być może masz rmalias, rm -iwięc spróbuj tego:
/bin/rm -f file.log
Aby zobaczyć swoje aliasy, możesz uruchomić alias.
Argumentowano, że rmalias do rm -ito zły pomysł. rmPoleceń domyślnie dyskretnie usuwa nazwie pliku. Poprzez aliasy do tego rm -i, możesz przyzwyczaić się do nie sprawdzania dokładnie przed naciśnięciem Enter, w zależności od interaktywnego monitu o uratowanie cię. Następnie piszesz rm some-important-filew środowisku bez aliasu.
Keith Thompson,
@Keith To bardzo prawda, ja osobiście pseudonim rm to rm -v
chown
1
Jeśli „rm” jest funkcją (zamiast aliasu), ta odpowiedź powinna działać. unsetPolecenie bash może być interesujące
Poparłem już odpowiedź rysia i to jest dokładnie to samo. Tylko entuzjazm dla poczucia humoru
rain_
Głosowałem zarówno za komentarzem, jak i za odpowiedzią tylko dlatego, że ktoś naprawdę poczuł humor na SO ...
Mac
5
W skrypcie powłoki chciałbyś użyć, rm -f <filename>ale masz również możliwość pozbycia się -iopcji niejawnej dla twojego środowiska poprzez wejście unalias rmdo powłoki (lub profilu).
yesProgram wielokrotnie odpowiada twierdząco na którekolwiek podpowiedzi. dzięki czemu możesz podłączyć go do interaktywnego rmprogramu, aby uzyskać pożądany efekt.
yes | rm <filename>
i odwrotnie, jeśli nie chcesz robić czegoś interaktywnego, możesz to zrobić
yes n | <something interactive>
i to powtórzy „n” w strumieniu wejściowym (skutecznie odpowiadając „nie” na pytania)
Obecnie pracuję w systemie, w którym powłoka bash otrzymała definicję polecenia rm jako funkcji w jednym z globalnych plików konfiguracyjnych:
rm () { /bin/rm -i ${1+"$@"}; }
Dlatego żadna z powyższych odpowiedzi dotyczących aliasów nie zadziałała. Aby przeciwdziałać irytującemu zachowaniu, wyłączam funkcję rm w moim pliku .bashrc
unset -f rm
Miałem podobny problem jak otwieracz. Jednak nie znalazłem żadnej odpowiedzi, która wspomniałaby o możliwości rmukrytej przez funkcję powłoki. Więc dodałem tutaj odpowiedź w nadziei, że okaże się pomocna dla kogoś, kto boryka się z tym samym rodzajem problemu.
Pisanie /bin/rmlub rm -fcały czas jest niewygodne i może mieć złe konsekwencje (w przypadku rm -f).
To mogło rozwiązać problem, ale nie odpowiada na pytanie.
podejrzany
Czy wybrana odpowiedź - połączenie nie /bin/rmzadziała? Jeśli mam funkcję w bash, a plik wykonywalny o tej samej nazwie w bieżącym katalogu, po prostu dodanie ./przed nazwą wywoła plik - nie funkcję. PS - Dodałem komentarz do wybranej odpowiedzi na temat funkcji iunset
Xen2050
Tak, /bin/rmdziała. Wykonanie czynności unseteliminuje potrzebę wpisywania pełnej ścieżki.
daw
0
Jeśli masz rmpseudonim rm -i, użyj unalias rm;
Nie używaj rm -fbezpośrednio, chyba że naprawdę chcesz usunąć wiele plików chronionych przed zapisem. Musi istnieć bardzo dobry powód do korzystania -f.
Jeśli jednak masz dużo plików chronionych przed zapisem, możesz wybrać rsync -r --delete empty/ removed_dir/większą prędkość.
Moim ulubionym sposobem na to jest po prostu użycie commandpolecenia w bash, tak samo jak używasz sudo. Spowoduje to uruchomienie polecenia bez aliasów, podobnie jak uruchomienie go /bin/rm(prawdopodobnie rmjest to alias as rm -i).
rm -f
,yes | rm
I tak dalej, ale to należy do SU.rm
nie wyświetla się komunikat „usunąć zwykły plik?” monit domyślnie. Musisz mieć to aliasyrm -i
lub zdefiniować jako funkcję. Dziwi mnie, że alias jest widoczny w twoim skrypcie. Czy wykonujesz skrypt (./foo.sh
) czy pozyskujesz go (. foo.sh
lubsource foo.sh
)?Odpowiedzi:
Być może masz
rm
alias,rm -i
więc spróbuj tego:Aby zobaczyć swoje aliasy, możesz uruchomić
alias
.źródło
command rm ...
\rm ...
rm
alias dorm -i
to zły pomysł.rm
Poleceń domyślnie dyskretnie usuwa nazwie pliku. Poprzez aliasy do tegorm -i
, możesz przyzwyczaić się do nie sprawdzania dokładnie przed naciśnięciem Enter, w zależności od interaktywnego monitu o uratowanie cię. Następnie piszeszrm some-important-file
w środowisku bez aliasu.unset
Polecenie bash może być interesująceFlaga siły usuwa wszystkie monity;
rm -f {file}
źródło
Niech moc będzie z Tobą -
rm -f
źródło
W skrypcie powłoki chciałbyś użyć,
rm -f <filename>
ale masz również możliwość pozbycia się-i
opcji niejawnej dla twojego środowiska poprzez wejścieunalias rm
do powłoki (lub profilu).źródło
yes
Program wielokrotnie odpowiada twierdząco na którekolwiek podpowiedzi. dzięki czemu możesz podłączyć go do interaktywnegorm
programu, aby uzyskać pożądany efekt.i odwrotnie, jeśli nie chcesz robić czegoś interaktywnego, możesz to zrobić
i to powtórzy „n” w strumieniu wejściowym (skutecznie odpowiadając „nie” na pytania)
źródło
yes n
opcja nie działa dla mnie. Kiedy używamyes n | rm file.txt
, faktycznie usuwa plik, mimo że plik jest odpowiednio chroniony.Jeśli masz wymagane uprawnienia do usunięcia pliku i nie chcesz otrzymywać monitu, wykonaj następujące czynności (-f = force):
Jeśli nie masz uprawnień do pliku, musisz użyć:
źródło
Ukośnik
\
odwraca aliasy.źródło
Oprócz używania
-f
parametru możeszfind
zamiast tego użyć polecenia, npźródło
Obecnie pracuję w systemie, w którym powłoka bash otrzymała definicję polecenia rm jako funkcji w jednym z globalnych plików konfiguracyjnych:
Dlatego żadna z powyższych odpowiedzi dotyczących aliasów nie zadziałała. Aby przeciwdziałać irytującemu zachowaniu, wyłączam funkcję rm w moim pliku .bashrc
Miałem podobny problem jak otwieracz. Jednak nie znalazłem żadnej odpowiedzi, która wspomniałaby o możliwości
rm
ukrytej przez funkcję powłoki. Więc dodałem tutaj odpowiedź w nadziei, że okaże się pomocna dla kogoś, kto boryka się z tym samym rodzajem problemu.Pisanie
/bin/rm
lubrm -f
cały czas jest niewygodne i może mieć złe konsekwencje (w przypadkurm -f
).źródło
/bin/rm
zadziała? Jeśli mam funkcję w bash, a plik wykonywalny o tej samej nazwie w bieżącym katalogu, po prostu dodanie./
przed nazwą wywoła plik - nie funkcję. PS - Dodałem komentarz do wybranej odpowiedzi na temat funkcji iunset
/bin/rm
działa. Wykonanie czynnościunset
eliminuje potrzebę wpisywania pełnej ścieżki.Jeśli masz
rm
pseudonimrm -i
, użyjunalias rm
;Nie używaj
rm -f
bezpośrednio, chyba że naprawdę chcesz usunąć wiele plików chronionych przed zapisem. Musi istnieć bardzo dobry powód do korzystania-f
.Jeśli jednak masz dużo plików chronionych przed zapisem, możesz wybrać
rsync -r --delete empty/ removed_dir/
większą prędkość.źródło
Moim ulubionym sposobem na to jest po prostu użycie
command
polecenia w bash, tak samo jak używaszsudo
. Spowoduje to uruchomienie polecenia bez aliasów, podobnie jak uruchomienie go/bin/rm
(prawdopodobnierm
jest to alias asrm -i
).Przykład:
źródło
źródło