Wenn Sie die Ausgabe eines Programms mit dem Parameter verwenden grep
oder egrep
durchsuchen, wird --help
anstelle der übereinstimmenden Zeilen die gesamte Ausgabe gedruckt.
Beispiel:
ssh-keygen --help | grep "known_hosts"
unknown option -- -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
[-N new_passphrase] [-C comment] [-f output_keyfile]
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
ssh-keygen -i [-m key_format] [-f input_keyfile]
ssh-keygen -e [-m key_format] [-f input_keyfile]
ssh-keygen -y [-f input_keyfile]
// etc
Bei der Suche nach einem Parameter wie ssh-keygen --help | grep "-p"
grep erkennt dieser Parameter diesen für sich. Es grep "\-p"
hilft nicht, dem Bindestrich (dh ) zu entkommen.
Beispiel:
ssh-keygen --help | grep "-p"
grep: invalid option -- 'p'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
unknown option -- -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
[-N new_passphrase] [-C comment] [-f output_keyfile]
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
ssh-keygen -i [-m key_format] [-f input_keyfile]
ssh-keygen -e [-m key_format] [-f input_keyfile]
ssh-keygen -y [-f input_keyfile]
ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile]
ssh-keygen -B [-f input_keyfile]
Wie kann man das lösen? Vielen Dank für jede Hilfe!
command-line
bash
grep
Rapstacke
quelle
quelle
Antworten:
Der
ssh-keygen
Befehl hat keine--help
Option, gibt also den Fehler "Unbekannte Option" aus, denkt stillschweigend an "RTFM" und gibt die Hilfe aus. Dies geschieht nicht auf stdout, sondern auf stderr , das nicht mit,|
sondern nur mit|&
(was einebash
Abkürzung für ist2>&1 |
) versehen ist:Ein völlig anderes Problem besteht
grep
darin, Ihren Suchausdruck als Option zu erkennen, da er mit einem Bindestrich beginnt. Glücklicherweisegrep
ist dies einer der vielen Befehle, die die--
Option "Ende der Optionen" erkennen und alles dahinter als Argument anstelle einer Option verwenden:man grep
erwähnt es nicht einmal, aber hier ist die Beschreibung dieser Option aus dembash
Handbuch:grep
bietet auch eine zweite Möglichkeit, mit Mustern umzugehen, die mit „-“ beginnen: Die-e
Option verwendet ein Muster als Argument, daher ist Folgendes ebenfalls möglich:Weiterführende Literatur
man bash
/ SHELL GRAMMATIK / Pipelinesman grep
/ OPTIONEN / Matching Controlquelle
--
? Andere Shell-Funktionen wie Dateinamenerweiterung, Variablenerweiterung und Befehlssubstitution werden ebenfalls nicht erwähnt. Es gibt viele Dinge, die die Shell tut, bevor der Befehl ausgeführt wird. Ich denke, das grep-Handbuch ist nicht der richtige Ort für solche Details.bash
und einige seiner Builtins verstehen--
, aber die Shell macht nichts damitgrep -- -p
(was wäre das?). Es istgrep
allein, der diese Option und ihre besondere Bedeutung versteht, daher sollte ihre Handbuchseite sie als Option auflisten.grep
folgte POSIX Utility Syntax Guideline 10 , so ist es nicht ihre Idee, aber immer noch ...Sie rufen
ssh-keygen
mit einer nicht vorhandenen Option an. Dies ist ein Fehler, und die Fehlerausgabe wird auf stderr angezeigt. Es sieht nicht so aus, als hättessh-keygen
es eine reguläre Option für die Ausgabe seiner Verwendung: Wenn dies der Fall wäre (wie dies bei GNU-Programmen standardmäßig der--help
Fall ist), würde diese "reguläre" Ausgabe auf stdout erscheinen und für weniger in der von Ihnen verwendeten Pipe zugänglich sein.Sie können dies umgehen, indem Sie
ssh-keygen --help 2>&1 | grep -e "-p"
:2>&1
stderr nach stdout umleiten, wo die Pipe es fangen kann, und-e
als Option für grep bedeutet "Folgendes ist der reguläre Ausdruck, der verwendet werden soll, auch wenn er wie eine Option aussieht".man ssh-keygen
sollte besser funktionieren, um die Verwendung zu erhalten, und wirdless
standardmäßig weitergeleitet, wo Sie nach regulären Ausdrücken suchen können/
, und das Lesen im Kontext ist normalerweise die bessere Wahl.quelle
Wenn Sie Hilfe zum Befehl ssh-keygen suchen, versuchen Sie es
Sie können dies auch
man ssh-keygen
über eine Befehlszeile tun und dann /den Suchbegriff drücken und eingeben, z. B. "kno". Drücken Sie Enter, verwenden Sie n, um mit der nächsten Instanz des Suchbegriffs fortzufahren (man man
weitere Informationen zur Verwendungman
). Beachten Sie, dass dieman
Suche nur nach unten sucht. Verwenden Sie daher PgUpoder Home, um zum Anfang des manuellen Eintrags zurückzukehren, bevor Sie eine neue Suche starten.quelle