Immer wenn ich rm
mehrere Elemente gleichzeitig mit Muschelkugeln versuche und es sogar die geringste Möglichkeit gibt, dass sich das Muster stärker ausdehnt, als ich es erwartet habe, versuche ich mich daran zu erinnern, -i
etwas Nützliches hinzuzufügen , aber (natürlich) könnte ich es vergessen und versehentlich wegblasen. Einige Leute versuchen, dieses Problem mit einem Alias zu lösen, alias rm='rm -i'
aber ich hasse die Idee, rm immer interaktiv zu machen, weil ich dann die Gewohnheit habe, die -f
ganze Zeit zu verwenden, was offensichtlich den ganzen Zweck zunichte macht.
Was ich tun möchte, ist, rm
nur zu verwenden, -i
wenn ich Globbing verwende, und -f
natürlich zu überschreiben -i
, damit ich trotzdem ganze Verzeichnisse mit dem Üblichen wegblasen kann rm -rf junk
.
Wäre also rm *blah*
wirklich so rm -i *blah*
, rm blah
würde aber genauso funktionieren wie eingegeben.
Für den Fall, dass es einen Unterschied gibt, wie dies in verschiedenen Shells erreicht werden kann, wähle ich eine Antwort aus, die Methoden für Bash und Zsh über Antworten liefert , die nur die eine oder die andere abdecken.
Hinweis : Ich bin nicht davon überzeugt, dass dies unbedingt eine gute Idee ist. Ich frage nur, ob es möglich ist. Wenn Sie der Meinung sind, dass dies eine dumme Idee ist, würde ich mich sehr über die Begründung Ihrer Meinung freuen, aber bitte posten Sie solche Kommentare nicht im Antwortfeld . Reale Antworten sagen mir entweder, wie ich das mache oder warum es nicht möglich ist (oder bieten möglicherweise eine alternative Methode an, um ein ähnliches Ergebnis zu erzielen). Aber wenn du mir sagen willst, warum das dumm ist, schreibe bitte einen Kommentar. Ich stimme wohlüberlegten Kommentaren zu, auch wenn ich mit der Schlussfolgerung nicht einverstanden bin.
rm -I
wird-i
das erst ausgelöst, wenn mehr als drei Dateien übergeben oder werden-r
. Inbash
, verwendetCtrl-x *
Abkürzung Tastatur , um die glob zu erweitern und diese selbst inspizieren.noglob
indem Sie z. B. rm aliasennoglob my-rm
und dann mit my-rm ein Skript erstellen, das nach einem Glob sucht, diesen erweitert und -i übergibt oder nicht. Nicht sicher, weiß nicht, zsh.myrm
und dieses Skript tun lassen, was für wundervolle Dinge Sie mögen.Antworten:
Es ist nicht einfach. Das Problem ist, dass wenn Sie tun:
rm sieht nur die Liste der Dateien, nicht das Globbing-Muster, das bereits von der Shell erweitert wurde.
Was Sie tun könnten, ist (zsh):
Dies teilt zsh mit, dass Muster beim Aufrufen von rm nicht erweitert werden sollten. Dann können Sie rm als eine Funktion neu definieren, die die Erweiterung selbst ausführt und das "-i" hinzufügt, falls dies erforderlich sein sollte:
Das Problem bei diesem Ansatz ist jedoch, dass dieses neue "rm" den Unterschied zwischen nicht sieht
und
Um die aufgerufene Datei zu entfernen
*
, müssten Sie sie schreiben:quelle
Funktioniert in Bash, wahrscheinlich in anderen Shells. Platzieren Sie in Ihrem
.bashrc
quelle
command rm
, um Hardcodierung zu vermeidenPATH
. Außerdem ist der Ansatz, die Anzahl der Argumente zu überprüfen, etwas unzuverlässig, darm
er Optionen beinhalten kann.\rm
$1
mit doppelten Anführungszeichen, aber Sie haben Unrecht mit dem fehlenden Befehl. Das Zitieren unterdrückt nur Aliase, NICHT das Nachschlagen von Funktionen. Diese Antwort schlägt eine Funktion vor, keinen Alias.