Sollten wir bei der Ausführung von „rm“ systematisch „--“ verwenden?

Sollten wir bei der Ausführung von „rm“ systematisch „--“ verwenden?

Eine Frage zur empfohlenen Verwendung von rm und--

Nehmen wir an, ich habe zwei Dateien erstellt -iund xx. Wenn ich versuche, sie zu entfernen mit

$ rm *

Ich bekomme:

rm: remove regular file `xx'? n

Und wie inWie entferne ich eine Datei in Linux, deren Name NUR aus einem Bindestrich besteht, wie beispielsweise "-"?und andere, dies kann folgendermaßen gelöst werden:

$ rm -- *

Offensichtlich könnten die Probleme durch Beschimpfungen -rfoder ähnliches möglicherweise noch viel schlimmer sein.

Meine Frage ist also:

Sollten wir systematisch --In- rmBefehle vor allem verwenden, was erweiterbar ist, um unangenehme Überraschungen oder Exploits zu vermeiden?

Der Grund, warum ich das frage, ist, dass ich diesen Trick vor einiger Zeit gelernt rmund dann vergessen habe, bis ein Teamkollege ihn vor Kurzem wieder erwähnt hat. Ich habe jedoch noch nie Empfehlungen in dieser Hinsicht gesehen und da es so riskant ist, frage ich mich, ob wir es häufiger verwenden sollten. Sollte die Verwendung --bei jeder Verwendung (und wahrscheinlich auch bei anderen Befehlen) eine Art Skript- und Konsolenmuster sein rm?

Antwort1

In einer perfekten Welt sollten wir wohl systematisch verwenden --. Aber wir haben alle gelernt, den rmBefehl zu verwenden, ohne systematisch einzugeben --, und das Eingeben kostet drei zusätzliche Tastenanschläge, also kann ich mir nicht vorstellen, dass das passiert. Außerdem --hat die Konvention zum Beenden von Optionen nicht immer existiert (weshalb viele Leute nichts davon gelernt haben, als sie gelernt haben, wie man verwendet rm).

Wenn Sie rm(und andere Befehle) in Shell-Skripten verwenden, sollten Sie auf jeden Fall immer defensiv programmieren. Zum Beispiel:

rm "$1"    # Remove the file named in the first command line argument

ist unsicher und sollte es rm -- "$1"auch sein.

rm "/var/spool/foo/$thatfile"

ist sicher, da der Inhalt $thatfilenicht zu rmeiner Fehlinterpretation der Argumente führen kann.

In Ihrem konkreten Beispiel ( rm *) würde ich wahrscheinlich normalerweise rm ./*als sichere Problemumgehung verwenden.

verwandte Informationen