2016-08-01 4 views
0

Ich habe eine Datei, deren Name -q (Es sieht aus wie dies durch Zufall gemacht)Katze `-q` Datei (unter Linux) - vorbei Operanden, die wie Optionen aussehen

ich, es ist Inhalt sehen möchten, so ich habe versucht, diese

$ cat '-q' 
$ cat "-q" 
$ cat $'-q' 

aber nichts funktionierte. (Alle gleichen Fehler gibt cat: invalid option -- 'q')

gibt es eine Möglichkeit, es zu sehen ist Inhalt?

+2

Die Anführungszeichen werden in jedem Fall durch die Shell entfernt * bevor * die 'cat'-Programmdatei gestartet wird. Daher hat es keine Ahnung, welche Zitate (wenn überhaupt) verwendet wurden. Sie steuern, wie die Shell Inhalte analysiert und wie die Shell einen String in eine Argumentliste aufteilt - aber für jedes einzelne zitierte Formular ist der aufgerufene syscall genau der gleiche: 'execv ("/usr/bin/cat " , {"cat", "-q", NUL}) 'oder ein Äquivalent dazu. –

+2

'cat ./- q', BTW, würde funktionieren. –

Antwort

2

eine Datei -q

touch -- "-q" 

tun genannt erstellen und seinen Inhalt

cat -- '-q' # Used single quotes to treat anything inside as literal characters 

sollte es tun können. -- bedeutet, was folgt als Positionsparameter behandelt werden soll.


Pls nehmen Sie sich Zeit bei @[ answer ] der rici zu suchen, die gegen doppelte Anführungszeichen einige substle Aspekte in Bezug auf einzelne erinnert.

+0

Lustig genug, das funktioniert nicht. Ich habe es auf meinem System versucht und habe '> cat: \ -q: Keine solche Datei oder dieses Verzeichnis'. –

+1

Gleiches Ergebnis. Vielleicht 'Katze ./- q'? –

+0

'Katze -" -q "' gearbeitet. Jedenfalls war '--' ein Schlüssel! Vielen Dank. ('cat -" \ -q "' hat auch bei mir nicht funktioniert.) – plhn

5

sjsam's helpful answer bietet tragfähige Lösungen, aber es ist wert tiefer Graben:

können in zwei Gruppen unterteilt werden (unter Verwendung von POSIX-Terminologie)

Argumente übergeben zu Unix-Utilities (wie cat):

  • Optionen (z. B. -l; abhängig von der Definition der Option, möglicherweise gefolgt von einem Option-Argument) - schaltet das das grundlegende Verhalten des Dienstprogramms ändern.

  • Operanden (beispielsweise ein Dateiname) - die Daten, die das Dienstprogramm auf arbeitet.

POSIX requires all options, if any, to come before any operands, aber GNU Dienstprogramme diese Anforderung entspannen für Bequemlichkeit Verwirbelung Optionen und Operanden zu ermöglichen.

Wie auch immer, ein gefolgt von einem Buchstaben oder einer Ziffer impliziert im Allgemeinen eine Option.

wie So Operanden zu ermöglichen vorbei, die mit -- Start passieren , spezielle Option -- kann jedes Dienstprogramm zu sagen, verwendet werden: behandelt alle nachfolgenden Argumente als Operanden, auch wenn sie aussehen wie Optionen.


Da Operand -q in diesem Fall sieht wie eine Option, es mit -- vorhergehenden er als Operanden markieren ist ein Muss.

Was, wie Zeichenfolge übergeben -q selbst als Argument:

  • -q enthält keine Schale Metazeichen, so dass die Schale es gibt, wie sie ist zu cat - keine benötigt zitieren.

  • Zitiert ('-q', "-q", $'-q', \-q) tut keinen Schaden in diesem Fall, hat aber absolut keine Wirkung hier, weil die Schale - nachdem alle Erweiterungen angewendet haben - einfach entfernt alle zitieren Zeichen (ein Prozess namens quote removal) vor der Übergabe des Wortes an cat (wie Charles Duffy Anmerkungen in den Kommentaren zu der Frage).

Verwandte Themen