Listen Sie alle optionalen Argumente eines bestimmten Befehls in bash auf

7

Ich habe mich gefragt, ob es eine Möglichkeit gibt, alle optionalen Argumente eines Befehls in bash herauszufinden, ohne die Manpage öffnen und viele unerwünschte Informationen durchgehen zu müssen.

Eg:
Input: <some_command> cat
Output: -A, --show-all           equivalent to -vET
  -b, --number-nonblank    number nonempty output lines, overrides -n
  -e                       equivalent to -vE
  -E, --show-ends          display $ at end of each line
  -n, --number             number all output lines
  -s, --squeeze-blank      suppress repeated empty output lines
  -t                       equivalent to -vT
  -T, --show-tabs          display TAB characters as ^I
  -u                       (ignored)
  -v, --show-nonprinting   use ^ and M- notation, except for LFD and TAB
      --help     display this help and exit
      --version  output version information and exit
abhigyanghosh30
quelle
2
Kommt darauf an, wie umfangreich die Hilfe geschrieben ist. Der Hilfebefehl ist fast immer kürzer mit komplexen Befehlen wie Bash (extremes Beispielbit zeigt Punkt)
Panther
Es gibt einen Befehl / ein Tool, das die am häufigsten verwendeten (aus dem Speicher) Optionen auflistet und eine kurze Zusammenfassung der manSeite bietet, aber ich vergesse, was es ist. Ich weiß, dass es im Ubuntu-Podcast (für das britische LoCo) im Abschnitt "Kommandozeilen-Liebe" bereitgestellt wurde, aber keine Ahnung, wie lange es her ist (in den letzten 1,5 bis 3 Jahren) (geschweige denn, dass in vielen Blogs darüber geschrieben wurde). Möglicherweise wurde es auch nicht standardmäßig für Ubuntu installiert.
Guiverc
Dies ist eines der Dinge, die ich an PowerShell mag. Im herkömmlichen Unix-System gibt es mehrere redundante Kopien der Beschreibung der Syntax eines Dienstprogramms: Es gibt den Befehlszeilenparser im Dienstprogramm selbst, die Ausgabe -h, die Manpage und die verschiedenen Befehlszeilen-Abschlussskripte für die verschiedenen Shells. In Powershell, ein Cmdlet erklärt seine Syntax an dem System einmal , und alles anderes (Tabulatorvervollständigung, auch mit Drop - Down - Menü, kurzer Hilfe, langer Hilfe, auch Syntax - Hervorhebung in dem Powershell - IDE) wird von der mitgelieferten Hülle als Dienstleistung an .
Jörg W Mittag

Antworten:

11

Es ist keineswegs universell, aber viele Befehle bieten eine Zusammenfassung der Verwendung als Antwort auf ein -hoder ein --helpArgument, z

$ cat --help
Usage: cat [OPTION]... [FILE]...
Concatenate FILE(s) to standard output.

With no FILE, or when FILE is -, read standard input.

  -A, --show-all           equivalent to -vET
  -b, --number-nonblank    number nonempty output lines, overrides -n
  -e                       equivalent to -vE
  -E, --show-ends          display $ at end of each line
  -n, --number             number all output lines
  -s, --squeeze-blank      suppress repeated empty output lines
  -t                       equivalent to -vT
  -T, --show-tabs          display TAB characters as ^I
  -u                       (ignored)
  -v, --show-nonprinting   use ^ and M- notation, except for LFD and TAB
      --help     display this help and exit
      --version  output version information and exit

Examples:
  cat f - g  Output f's contents, then standard input, then g's contents.
  cat        Copy standard input to standard output.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/cat>
or available locally via: info '(coreutils) cat invocation'
Steeldriver
quelle
1
das --helpnimmt an, dass es ein GNU-Befehl ist; Wenn aus einem BSD / Unix-Hintergrund a -hhäufiger Hilfe ist, können zwei Versuche erforderlich sein.
Guiverc
2
In einigen Fällen --helpgibt die Verwendung die Optionen trotzdem zurück , obwohl dies eine ungültige Option ist. Zum Beispiellspci --help
chili555
5

Der beste Ansatz hängt davon ab, welche Art von Befehl Sie ausführen. Sie können es versuchen -hoder --helpwie von steeldriver vorgeschlagen , jedoch für einige Befehle, die möglicherweise nicht alle verfügbaren Optionen anzeigen . Im Idealfall werden alle Optionen angezeigt. Selbst dann könnten sie jedoch nicht alle erklärt werden. In offiziellen Dokumentationen wie einer manoder einer infoSeite werden normalerweise alle Optionen angezeigt und erläutert - oder zumindest alle, die die Entwickler von den Benutzern erwarten. (Manchmal gibt es nicht dokumentierte Optionen.)

Zuerst empfehle ich zu überprüfen, ob der Befehl ein externer Befehl oder eine eingebaute Shell ist . Sie können dies mit dem typeBefehl tun . In bashkönnen Sie das -aFlag an den typeBefehl übergeben, um anzuzeigen, was ausgeführt werden würde , wenn die erste Übereinstimmung nicht vorhanden wäre:

ek@Io:~$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls

Für mich (und wahrscheinlich für Sie) lsist ein Alias. Die Alias-Erweiterung ist nicht rekursiv, daher verwendet der lsIn ls --color=autonicht den Alias, sondern /bin/lsstattdessen die zweite Auflistung . Dies ist ein Pfad zu einer ausführbaren Datei und damit ein externer Befehl.

Um die Dokumentation zum lsEinschließen aller verfügbaren Optionen anzuzeigen , würde ich daher ausführen man ls.

Einige Fälle catsind einfach:

ek@Io:~$ type -a cat
cat is /bin/cat

Befehle, die in die Shell integriert sind, haben normalerweise keine eigenen Handbuchseiten, aber Sie können das helpintegrierte verwenden, um mehr über sie zu erfahren:

ek@Io:~$ type -a history
history is a shell builtin
ek@Io:~$ type -a help
help is a shell builtin

So können Sie laufen, help historyum etwas zu lernen historyoder help helpetwas darüber zu lernen help.

Für einige integrierte Funktionen, wie z compgen. helpB., zeigt die integrierte Version alle Optionen an, erklärt jedoch die meisten nicht. Wenn Sie weitere Informationen zu einer eingebauten Shell benötigen, können Sie die Handbuchseite für bash( man bash) oder die längere und vollständigere Dokumentation konsultieren, indem Sie sie online ausführen info bashoder besuchen . Möglicherweise ist der Abschnitt über integrierte Funktionen besonders nützlich.

Einige Befehle sind sowohl als externe ausführbare Dateien als auch als integrierte Shell-Dateien verfügbar. Dies ist ein weiterer Grund, warum die Verwendung von type -afirst hilfreich sein kann:

ek@Io:~$ type -a printf
printf is a shell builtin
printf is /usr/bin/printf

Wenn Sie beispielsweise ausführen man printf, werden Ihnen keine Informationen zu der -vOption angezeigt , da /usr/bin/printfdiese nicht unterstützt wird. Die basheingebaute Shell funktioniert jedoch und der Text, der beim Ausführen angezeigt wird, help printflistet und erklärt ihn.

Schließlich ist es für Manpages nützlich zu wissen, dass Sie sie online lesen können .

Eliah Kagan
quelle