Hinweis: Meine Antwort ist im Fall des OP NICHT gültig und gilt nur für Werkzeuge, die der unten genannten Konvention folgen, und nicht für eine Datei mit dem Namen genau nur -
(Bindestrich). Dies ist häufig auch ein Sonderfall, um diese Ablesung aus dem Standard anzugeben Eingabe wird erwartet. Siehe die akzeptierte Antwort.
Lassen Sie dies hier, da es nützliche Informationen für andere Fälle enthält, auf die man bei der Suche nach Antworten stoßen kann.
Double-Dash es!
Verwenden Sie die Standardkonvention double-dash ( --
), um das letzte Argument anzugeben:
less -- -FILENAME
Beispiel
$ echo "meh" > -badname
$ less -badname
Number is required after -b
$ less -- -badname # GREAT SUCCESS!
Was ist los?
Dieses --
Argument stammt aus einer Konvention, die von den meisten Implementierungen von Shell-Dienstprogrammen und Befehlszeilentools unterstützt wird, und die meisten Shells werden sichtbar dafür plädieren, dass Sie beim Implementieren von CLI-Tools die Konvention befolgen sollten.
Empfohlen von der Open Group
Die OpenGroup erwähnt es auch im Abschnitt Utility description defaults (v6) ihrer Basisspezifikation:
Standardverhalten: [...] Standarddienstprogramme, die keine Optionen akzeptieren, aber Operanden akzeptieren, erkennen "-" als erstes zu verwerfendes Argument.
Die Anforderung zum Erkennen von "-" besteht darin, dass konforme Anwendungen eine Möglichkeit benötigen, ihre Operanden vor beliebigen Optionen zu schützen, die die Implementierung als Erweiterung bereitstellen kann. Wenn für das Standarddienstprogramm foo beispielsweise angegeben ist, dass es keine Optionen verwendet, und die Anwendung einen Pfadnamen mit einem führenden Bindestrich benötigt, kann dies sicher folgendermaßen erfolgen:
foo -- -myfile
und vermeiden Sie Probleme mit -m als Erweiterung.
Und in den Utility-Syntaxrichtlinien (v7):
Leitlinie 10:
Das erste Argument, das kein Optionsargument ist, sollte als Trennzeichen für das Ende von Optionen akzeptiert werden. Alle folgenden Argumente sollten als Operanden behandelt werden, auch wenn sie mit dem Zeichen "-" beginnen.
Empfohlen von Bash
Hier ein Auszug aus dem Bash-Handbuch über die eingebauten Funktionen, die es unterstützen:
Sofern nicht anders angegeben, wird bei jedem in diesem Abschnitt dokumentierten eingebauten Befehl das Akzeptieren von Optionen vorangestellt und - acceptiert -, um das Ende der Optionen zu kennzeichnen.
Die eingebauten Funktionen:, true, false und test akzeptieren keine Optionen und werden nicht speziell behandelt. Die eingebauten Funktionen exit, logout, break, continue, let und shift akzeptieren und verarbeiten Argumente beginnend mit - ohne dass dies erforderlich ist -. Andere integrierte Funktionen, die Argumente akzeptieren, aber nicht als akzeptierende Optionen angegeben sind, interpretieren Argumente, die mit ungültigen und erforderlichen Optionen beginnen, um diese Interpretation zu verhindern.
Beachten Sie, dass das Echo nicht interpretiert - um das Ende der Optionen zu bedeuten.
Zusätzliche Lektüre