GNU/Linux >> Linux Esercitazione >  >> Linux

Passare le opzioni a un programma:qual è la convenzione per un trattino contro due?

Il più comune è GNU getopt stile, con un trattino per le opzioni brevi e due trattini per le opzioni lunghe.

  • Inizialmente, i programmi Unix accettavano opzioni di una sola lettera precedute da un singolo trattino e facoltativamente raggruppate:

    ls -laF
    
    ls -l -a -F
    

    I due comandi precedenti sono uguali.

    Quando un'opzione assume un valore, sovrascrive il raggruppamento:In gpg -aofoo.gpg , -a e -o sono opzioni e foo.gpg è il valore assegnato a -o .

  • La maggior parte di loro lo ha fatto, comunque.

    tar cvzf è uno spettacolo comune. Le versioni correnti accettano tar -cvzf anche e, a seconda che si aggiunga o meno il trattino, gli argomenti verranno interpretati in modi molto diversi. Ad esempio, questi due significano la stessa cosa (nota come le opzioni senza trattini non lo sono immediatamente prima del loro valore):

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

    BSD ps utilizza sempre -; SysV ps non lo fa mai. La versione Linux accetta entrambe le versioni e cambia il suo comportamento a seconda che un'opzione sia stata preceduta da un trattino. (A differenza dell'esempio precedente di tar, ps cambia l'opzione significati anche.)

  • I programmi X11 utilizzavano opzioni lunghe precedute da un singolo trattino o talvolta da un segno più:

    xterm -class FooTerm +vb -u8
    

    Questo imposta le opzioni class e u8 e disattiva il vb opzione.

    Lo stile X11 non è compatibile con il raggruppamento di opzioni.

  • Successivamente, sono state aggiunte opzioni lunghe a GNU getopt() in un modo compatibile con le opzioni di una lettera.

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

    Questo imposta -s , -e e --no-armor (che è l'opposto di --armor ).

    Di solito, --output=signed.gpg e --output signed.gpg sono equivalenti. (Ma non sempre, ad esempio curl non accetta il primo, solo il secondo.)

    (Se non ricordo male, le opzioni lunghe usavano + come prefisso prima che fosse cambiato in -- .)

  • La specifica POSIX ha una sezione Utility Argument Syntax, che descrive le opzioni di un carattere.

La maggior parte dei programmi Windows utilizza i propri parser, facendo impazzire gli utenti.

  • Alcuni richiedono /a /b /c , altri consentono /a/b/c in stile VMS , altri ancora preferiscono /abc in stile Unix .
  • La maggior parte usa / come prefisso, alcuni accettano anche - , altri accettano solo - .
  • I valori possono essere forniti come /foo bar , /foo=bar , /foo:bar .
  • Di solito gli spazi possono essere /quoted "like this" , ma alcuni programmi accettano " come carattere letterale. (Questo è uno svantaggio di lasciare che il programma esegua la propria divisione delle parole; in Unix questo è gestito dalla shell.)
  • I programmi multipiattaforma possono utilizzare un'implementazione di getopt .

Generalmente il primo si trova nei programmi più vecchi che sono troppo radicati per cambiare. Questo tipo di opzioni lunghe non è compatibile con lo standard getopt() funzione.

Il secondo stile è stato introdotto da GNU getopt_long() , ed è conforme agli standard esistenti che prevedono che il primo stile contenga opzioni brevi raggruppate (vale a dire, -orange dovrebbe significare -o -r -a -n -g -e ). Questo stile di opzione lunga è fortemente preferito.


Linux
  1. Qual è la password di root predefinita per MySQL 5.7

  2. Qual è l'equivalente del comando File Linux per Windows?

  3. Cosa fa ENV ("_") per l'anti-debug?

  4. A cosa serve il gruppo `ombra`?

  5. Cosa costituisce un "campo" per il comando cut?

Qual è la migliore distribuzione Linux per principianti?

I 40 esempi di comandi Go per aspiranti sviluppatori Golang

Cosa può impedire al passaggio init=/path/to/program al kernel di avviare il programma come init?

Qual è la differenza tra le opzioni -g e -G in useradd

Qual è il file predefinito per `hostname`?

Cos'è la funzione syslog per i log di auditd?