Ilekroć mam rm
kilka przedmiotów naraz z globowaniem skorupy i istnieje nawet najmniejsza możliwość, że wzór rozszerzy się bardziej niż się tego spodziewam, zawsze staram się pamiętać o dodaniu -i
, ale (oczywiście) mogłem zapomnieć i przypadkowo zdmuchnąć coś pożytecznego. Niektórzy próbują rozwiązać ten problem za pomocą aliasu, na przykład alias rm='rm -i'
nie podoba mi się pomysł, aby rm zawsze był interaktywny, ponieważ wtedy nabiorę nawyku korzystania z niego przez -f
cały czas, co oczywiście pokona cały cel.
To, co chciałbym zrobić, to rm
używać tylko -i
wtedy, gdy używam globowania, i -f
oczywiście w celu zastąpienia -i
, więc nadal mogę wymazać całe katalogi ze zwykłymi rm -rf junk
.
Dlatego rm *blah*
naprawdę byłoby, rm -i *blah*
ale rm blah
działałoby dokładnie tak, jak na maszynie.
W przypadku różnicy, w jaki sposób można to osiągnąć w różnych powłokach, wybiorę odpowiedź, która dostarcza metody zarówno dla bash, jak i zsh, zamiast odpowiedzi, które obejmują tylko jedną lub drugą.
Uwaga : tak naprawdę nie jestem przekonany, że to koniecznie dobry pomysł; Pytam tylko, czy to możliwe. Jeśli uważasz, że to głupi pomysł, byłbym bardzo szczęśliwy, słysząc uzasadnienie twojej opinii, ale proszę nie zamieszczaj takich komentarzy w polu odpowiedzi . Prawdziwe odpowiedzi albo mówią mi, jak to zrobić, albo wyjaśniają, że / dlaczego nie jest to możliwe (lub ewentualnie oferują alternatywną metodę uzyskania podobnego wyniku). Ale jeśli chcesz mi powiedzieć, dlaczego to jest głupie, napisz jako komentarz. Głosuję za uzasadnionymi komentarzami, nawet jeśli nie zgadzam się z wnioskiem.
noglob
np. Z aliasingu rm do noglob my-rm
, a następnie mając my-rm jako skrypt, który sprawdza glob, rozwija go i przekazuje -i lub nie. Nie jestem pewien, nie znam Zsh.
myrm
i pozwolić temu skryptowi robić to, co lubisz.
rm -I
jest tak,-i
że uruchamia się tylko wtedy, gdy-r
zostaną przekazane więcej niż trzy pliki . Wbash
użyjCtrl-x *
skrótu klawiaturowego, aby rozwinąć glob i sprawdzić go sam.