Dies mag eine einfache Frage sein, aber wie verwende ich Dateien, die mit "-" beginnen, in Befehlszeilenprogrammen?
Ich versuche beispielsweise, pdfgrep
eine Datei mit dem Namen zu verwenden, -2013-01-01.pdf
aber es wird beanstandet, dass für 2, 0, 1, 3 usw. keine Optionen definiert sind.
Das Ändern des Dateinamens in etwas, das nicht mit "-" beginnt, löst das Problem. Dies ist jedoch keine Option, da die Dateien nicht von mir erstellt wurden. Ich möchte nur nach einer bestimmten Änderung suchen, von der ich weiß, dass sie kommt.
command-line
special-characters
filename
Kristoffer
quelle
quelle
grep -i dfv -- -myfile1 -myfile2
.Antworten:
Sehr häufig
--
wird in der Befehlszeile verwendet, um einem Programm zu signalisieren, dass keine verfügbaren Befehlsschalter mehr verwendet werden. Dies ist besonders nützlich, wenn eine Datei einen Bindestrich enthält, den das Programm als Option interpretieren würde.Ohne das
--
wird ein Fehler generiert:Mit den
--
verwendeten haben wir einen erfolgreichen Befehl:pdfgrep
ist so programmiert, dass verstanden wird--
, dass die folgenden Befehlszeilenargumente keine Optionen sind. Die meisten Programme tun dasselbe, aber nicht alle Programme verstehen--
. Bei Programmen, die dies nicht tun, müssen Sie dem Dateinamen Folgendes voranstellen./
:Dies sollte mit jedem Befehl funktionieren, es sei denn, der Befehl kann aus irgendeinem Grund keinen Pfad akzeptieren, nur einen reinen Dateinamen.
Eine allgemeine Einführung in die Befehlszeile finden Sie in dieser nützlichen PDF-Datei .
quelle
--
hat nicht funktioniert mit allen Kommandozeilenprogrammen. Ich hatte von diesem Kommentar des OP ausgegangen , dasspdfgrep
es einer von ihnen ist, der ihn nicht erkennt--
. Aber das Akzeptieren schlägt hier etwas anderes vor. In jedem Fall muss ein Programm zum Erkennen codiert werden--
. Viele Programme verwenden Bibliotheken, um ihre Argumente zu analysieren, die sie erkennen--
. Aber manche tun es nicht und manche sind nicht dafür codiert, es zu erkennen--
.--
die übliche./
pdfgrep ./-2013-01-01.pdf
./
ist die tragbarste und robusteste Lösung. Funktioniert mit jedem Programm und jeder Unix-Version.Sie stellen dem Dateinamen
./
(oder einen anderen relativen oder absoluten Pfad, der funktioniert) voran . Auf diese Weise ist es portabel.Beispiel:
Die Verwendung von
--
, um das Ende von Optionen anzuzeigen, ist nicht immer verfügbar. Einige Befehle werden es wissen, andere nicht. Dies wird sich systemübergreifend ändern. Am Ende ist es also weniger portabel.quelle