2012-01-21 14 views
35

Esto es más acerca de la invocación de un programa, que cualquier lenguaje o analizador (aunque estoy seguro de que la elección de la biblioteca del analizador puede depender de esto). Mira, he usado muchas utilidades de línea de comandos de Linux. Y hay algunos patrones obvios; '-' precede una sola letra para opciones cortas, múltiples opciones que no toman argumentos se pueden combinar, '-' precede versiones largas de opciones, y así sucesivamente.¿Existen estándares para los modificadores y argumentos de la línea de comandos de Linux?

Sin embargo, en algunos casos, las mayúsculas se utilizan para invertir una opción. Entonces, '-d' podría significar que se ejecuta como daemon, pero '-D' sería no ejecutado como daemon. (¿Por qué no simplemente omite la opción si no la quiere? Eso nunca ha sido claro, pero en realidad es bastante común, así que creo que debe haber alguna razón). Pero en algunos programas, un capital es una opción completamente no relacionada; si '-d' se ejecuta como daemon, '-D' podría ser para habilitar el modo de depuración. ¿Hay algún tipo de director general detrás de esto y cuál es el mejor para elegir? ¿O solo estamos lidiando con "lo que sea que funcione"?

También hay algunos comandos que, además de (o en lugar de) opciones con argumentos, solo toman argumentos solitarios. cp es un buen ejemplo de esto; aparte de una pareja que rara vez se alterna, se presume que el último argumento que recibe es el destino, y se supone que todos los argumentos entre la lista de opciones y el destino son fuentes. ¿Existe una regla empírica cuando está "bien" confiar en un orden como ese, en lugar de usar banderas de opciones explícitas con argumentos?

+2

No hay un estándar universal para las opciones de línea de comandos, aunque las convenciones 'getopt' son un buen punto de partida. Para responder a su pregunta sobre las opciones de inversión, el valor predeterminado generalmente se especifica en un archivo de configuración, por lo que necesita activar y desactivar la fuerza. – Borealid

Respuesta

24

general, sí.

+0

Probablemente esté usando getopt, aunque no es demasiado útil en los estándares. Ese enlace IEEE, sin embargo, es extremadamente útil. – DigitalMan

+0

En caso de que esté a punto de implementar un analizador por sí mismo: hay muchas posibilidades de encontrar una biblioteca de analizador para cualquier idioma, hay bibliotecas de analizadores para java python c y creo que muchas otras. De modo que no hay necesidad de reinventar la rueda. – ApriOri

+0

En realidad, es mi trabajo reinventar la rueda: P Pero como las opciones solo se analizan una vez, no hay necesidad de que vaya a una velocidad ridícula. Voy a caer en getopt. – DigitalMan

15

ESR ha recopilado mucha información al respecto en su libro "El arte de la programación UNIX". Aquí hay un fragmento.

-a
Todo (sin argumento). Si hay un estilo GNU, la opción all, para que -a sea algo más que un sinónimo sería bastante sorprendente. Ejemplos: fuser (1), fetchmail (1).

Añadir como en tar (1). Esto a menudo se combina con -d para eliminar.

-b
Tampón o tamaño de bloque (con argumento). Establezca un tamaño de búfer crítico o (en un programa que tenga que ver con archivar o administrar medios de almacenamiento ) establecer un tamaño de bloque. Ejemplos: du (1), df (1), tar (1).

Lote. Si el programa es naturalmente interactivo, -b puede usarse para suprimir avisos o establecer otras opciones apropiadas para aceptar la entrada de un archivo en lugar de un operador humano. Ejemplo: flex (1).

-c
Comando (con argumento). Si el programa es un intérprete que normalmente recibe comandos de la entrada estándar, se espera que la opción de un argumento -c se le pase como una sola línea de entrada . Esta convención es particularmente sólida para shells y intérpretes tipo caparazón. Ejemplos: sh (1), ash (1), bsh (1), ksh (1), python (1). Compare -e a continuación.

Verificar (sin argumento). Compruebe la corrección de los argumentos del archivo al comando, pero en realidad no realice el procesamiento normal . Utilizado frecuentemente como una opción de comprobación de sintaxis por los programas que hacen la interpretación de los archivos de comando. Ejemplos: getty (1), perl (1).

Ver la lista completa en http://catb.org/~esr/writings/taoup/html/ch10s05.html

9

La interfaz de línea de comandos de Linux/GNU sigue el estándar POSIX. Esto es observado por GNU en sus estándares: http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html.

La sintaxis de la línea de comandos también forma parte de la especificación Single Unix, aunque las opciones largas son un GNU innovation IIRC.

Ver aquí: http://pubs.opengroup.org/onlinepubs/7908799/xbd/utilconv.html

Pero sí, esta norma se implementa como getopt.

Cuestiones relacionadas