GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Übergeben von Optionen an ein Programm:Was ist die Konvention für einen Bindestrich im Vergleich zu zwei?

Am gebräuchlichsten ist GNU getopt Stil, mit einem Bindestrich für kurze Optionen und zwei Bindestrichen für lange Optionen.

  • Anfänglich nahmen Unix-Programme Optionen mit einem einzelnen Buchstaben, denen ein einzelner Bindestrich vorangestellt war, und optional gebündelt:

    ls -laF
    
    ls -l -a -F
    

    Die beiden obigen Befehle sind gleich.

    Wenn eine Option einen Wert annimmt, überschreibt sie die Bündelung:In gpg -aofoo.gpg , -a und -o sind Optionen und foo.gpg ist der Wert, der -o gegeben wird .

  • Die meisten taten es jedenfalls.

    tar cvzf ist ein alltäglicher Anblick. Aktuelle Versionen akzeptieren tar -cvzf auch, und je nachdem, ob Sie den Bindestrich hinzufügen, werden die Argumente sehr unterschiedlich interpretiert. Zum Beispiel bedeuten diese beiden dasselbe (beachten Sie, dass dashless-Optionen nicht sind unmittelbar vor ihrem Wert):

    tar -xf file.tgz -vzO /etc/passwd /var/backups
    
    tar xfvzO file.tgz /etc/passwd /var/backups
    

    BSD ps verwendet immer -; SysV ps tut niemals. Die Linux-Version akzeptiert beide Versionen und ändert ihr Verhalten, je nachdem, ob einer Option ein Bindestrich vorangestellt wurde. (Im Gegensatz zum obigen tar-Beispiel ändert ps die Option Bedeutungen auch.)

  • X11-Programme verwendeten lange Optionen, denen ein einzelner Bindestrich oder manchmal ein Pluszeichen vorangestellt war:

    xterm -class FooTerm +vb -u8
    

    Dies setzt die Optionen class und u8 , und unset die vb Option.

    Der X11-Stil ist mit der Optionsbündelung nicht kompatibel.

  • Später wurden lange Optionen zu GNU getopt() hinzugefügt auf eine Weise, die mit Ein-Buchstaben-Optionen kompatibel ist.

    gpg -se --no-armor --output=signed.gpg
    

    Dies setzt -s , -e , und --no-armor (das ist das Gegenteil von --armor ).

    Normalerweise --output=signed.gpg und --output signed.gpg sind gleichwertig. (Aber nicht immer – z. B. akzeptiert curl nicht ersteres, sondern nur letzteres.)

    (Wenn ich mich richtig erinnere, verwendeten lange Optionen + als Präfix, bevor es in -- geändert wurde .)

  • Die POSIX-Spezifikation hat einen Abschnitt Utility Argument Syntax, der die Ein-Zeichen-Optionen beschreibt.

Die meisten Windows-Programme verwenden ihre eigenen Parser, was die Benutzer in den Wahnsinn treibt.

  • Einige erfordern /a /b /c , andere erlauben /a/b/c im VMS-Stil , wieder andere bevorzugen /abc im Unix-Stil .
  • Die meisten verwenden / als Präfix akzeptieren manche auch - , andere akzeptieren nur - .
  • Werte können als /foo bar angegeben werden , /foo=bar , /foo:bar .
  • Normalerweise können Leerzeichen /quoted "like this" sein , aber einige Programme nehmen den " als wörtliches Zeichen. (Dies ist ein Nachteil davon, das Programm seine eigene Wortaufteilung durchführen zu lassen; in Unix wird dies von der Shell gehandhabt.)
  • Plattformübergreifende Programme können eine Implementierung von getopt verwenden .

Im Allgemeinen ist ersteres in älteren Programmen zu finden, die zu fest verankert sind, um sie zu ändern. Diese Art von langen Optionen sind mit dem Standard getopt() nicht kompatibel Funktion.

Der zweite Stil wurde von GNU getopt_long() eingeführt , und entspricht bestehenden Standards, die erwarten, dass der erste Stil gebündelte kurze Optionen sind (also -orange soll -o -r -a -n -g -e bedeuten ). Diese Art der langen Option wird stark bevorzugt.


Linux
  1. Was ist die beste Linux-Distribution für Anfänger?

  2. Crontab versehentlich nur mit dem Bindestrich eingegeben?

  3. Enpass – Die perfekte One-Passwort-Alternative kostenlos

  4. Wozu dient die 'soname'-Option zum Erstellen gemeinsam genutzter Bibliotheken?

  5. Was ist das Standard-Root-Passwort für MySQL 5.7

Die 40 Go-Befehlsbeispiele für angehende Golang-Entwickler

Was bewirkt ENV („_“) für das Anti-Debugging?

Wofür wird die „Schatten“-Gruppe verwendet?

Was kann dazu führen, dass das Übergeben von init=/path/to/program an den Kernel das Programm nicht als init startet?

Was ist der Unterschied zwischen den Optionen -g und -G in useradd

Was ist die Syslog-Einrichtung für auditd-Protokolle?