2012-01-21 12 views
35

Questo è più circa l'invocazione di un programma, che qualsiasi linguaggio o parser (anche se sono sicuro che la scelta della libreria parser può dipendere da questo). Vedi, ho usato un sacco di utility da riga di comando di Linux. E ci sono alcuni modelli ovvi; '-' precede una singola lettera per le opzioni brevi, più opzioni che non accettano argomenti possono essere combinate, '-' precede le versioni lunghe delle opzioni e così via.Esistono degli standard per gli switch e gli argomenti della riga di comando di Linux?

Tuttavia, in alcuni casi, la capitalizzazione viene utilizzata per invertita un'opzione. Quindi, '-d' potrebbe significare eseguire come daemon, ma '-D' sarebbe a non eseguito come daemon. (Perché non omettere l'opzione solo se non la vuoi? Non è mai stato chiaro, ma in realtà è piuttosto comune, quindi immagino ci sia un motivo.) Ma in alcuni programmi, una capitale è un'opzione completamente non correlata; se '-d' viene eseguito come daemon, '-D' potrebbe essere per abilitare la modalità di debug. C'è una sorta di principio dominante dietro a questo, e qual è il migliore da scegliere? O abbiamo solo a che fare con "qualunque cosa funzioni"?

Ci sono anche alcuni comandi che, oltre alle opzioni (o al posto di) con argomenti, prendono solo argomenti solitari. cp è un buon esempio di questo; a parte una coppia usata raramente, l'ultimo argomento che riceve è presumibilmente la destinazione, e si presume che qualsiasi argomento tra l'elenco di opzioni e la destinazione sia una fonte. Esiste una regola empirica quando è "ok" affidarsi a un ordine del genere, invece di utilizzare i flag di opzione espliciti con argomenti?

+2

Non esiste uno standard universale per le opzioni della riga di comando, anche se le convenzioni 'getopt' sono un buon punto di partenza. Per rispondere alla tua domanda sulle opzioni di inversione, l'impostazione predefinita viene in genere specificata in un file di configurazione, quindi è necessario sia l'interruttore di abilitazione forza che i pulsanti di disabilitazione forzata. – Borealid

risposta

24

In generale, sì.

+0

Probabilmente userò getopt, sebbene non sia troppo utile per gli standard. Il collegamento IEEE, tuttavia, è estremamente utile. – DigitalMan

+0

Nel caso in cui si stia per implementare un parser da soli: è molto probabile trovare una libreria parser per qualsiasi lingua, ci sono librerie di parser per java python c e molti altri. Quindi non c'è bisogno di reinventare la ruota. – ApriOri

+0

In realtà, è il mio lavoro reinventare la ruota: P Ma dal momento che le opzioni vengono analizzate solo una volta, non c'è bisogno che vada a velocità ridicola. Mi limiterò a capirlo. – DigitalMan

15

ESR ha raccolto molte informazioni a riguardo nel suo libro "The Art of UNIX Programming". Ecco un frammento.

-a
Tutto (senza argomenti). Se esiste una opzione di stile GNU, per -a essere tutto fuorché un sinonimo sarebbe piuttosto sorprendente. Esempi: fuser (1), fetchmail (1).

Append, come nel tar (1). Questo è spesso associato con -d per eliminare.

-b
Dimensioni del buffer o del blocco (con argomento). Impostare una dimensione del buffer critica o (in un programma che ha a che fare con l'archiviazione o la gestione dei supporti di memorizzazione ) impostare una dimensione di blocco. Esempi: du (1), df (1), tar (1).

Lotto. Se il programma è interattivo in modo naturale, -b può essere utilizzato per i prompt di soppressione o impostare altre opzioni appropriate per accettare l'input da un file anziché da un operatore umano. Esempio: flex (1).

-c
Comando (con argomento). Se il programma è un interprete che normalmente accetta i comandi dallo standard input, è previsto che l'opzione di un argomento -c venga passata ad esso come una singola riga di input . Questa convenzione è particolarmente valida per le shell e gli interpreti di tipo shell . Esempi: sh (1), ash (1), bsh (1), ksh (1), python (1). Confronta -e sotto.

Verifica (senza argomenti). Verificare la correttezza degli argomenti del file nel comando, ma in realtà non eseguire l'elaborazione normale . Utilizzato frequentemente come opzione di controllo della sintassi per programmi che eseguono l'interpretazione dei file di comando. Esempi: getty (1), perl (1).

vedere la lista completa a http://catb.org/~esr/writings/taoup/html/ch10s05.html

9

L'interfaccia a riga di comando di Linux/GNU segue lo standard POSIX. Questo è notato da GNU nei loro standard: http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html.

Anche la sintassi della riga di comando fa parte della Specifica Unix singola, mentre le opzioni -long sono un IIRC dell'innovazione GNU.

vedere qui: http://pubs.opengroup.org/onlinepubs/7908799/xbd/utilconv.html

Ma sì, questo standard è implementato come getopt.

Problemi correlati