13 – Línea de comandos: Options vs Flags vs Switches vs Arguments
Si tienes algo de experiencia en la línea de comandos puedes haber visto que los comandos (mv, cp, git, mkdir
) por lo general se componen de varias partes y se comportan de diferentes maneras dependiendo de estas opciones.
En este post voy a tratar de explicar y establecer un lenguaje común entre las diferentes partes de los comandos.
Estas partes son llamadas options (opciones), flags, switches, toggles y arguments (argumentos).
Options (Opciones)
Primero, las opciones son los argumentos que modifican el comportamiento del programa. Por convención, estas empiezan con un guion “-” para las versiones resumidas (por lo general una sola letra, short form), y dos guiones “–” para la versión más larga (long form). i.e: “-h”, y “–help”.
Las opciones pueden tener valores asociados a ellos mismos, por ejemplo, en el programa ffmpeg
tenemos la opcion -preset
la cual podemos especificar un valor como fast
o ultrafast
. Por otro lado, el programa git commit
tiene la opción -m
que te permite agregar el commit message: git commit -m "Update README"
Flags / Switches / Toggles
Las flags, también llamadas switches o toggles, son un tipo de opciones que se usan exclusivamente para encender o apagar alguna característica del programa: --verbose, --quiet, --all, --force
.
Por ejemplo, en muchos comandos encontramos la flag “-v” o “–verbose” (verboso en español), que indica que queremos ver el proceso completo del progama, es decir todos los pasos que ejecuta de manera verbosa. Por ejemplo, si usamos esta opcion cuando hacemos una copia con cp
vamos a poder ver todos los archivos mientras se van copiando. (Tomar en cuenta que para copiar directorios es necesario especificar además el flag “-r”, de “recursivo”)
Argumentos (argumentos)
Por último, los argumentos son los objetos que el programa utiliza o modifica durante su ejecución. Por ejemplo, en el comando mv
los argumentos son el archivo o directorio de origen y de destino. Otro ejemplo, en el comando cat
el argumento es el archivo que se quiere imprimir en el stdout
.
Tips
Como saber qué opciones tienen el comando
Por lo general es de mucha ayuda familiarizarse con las opciones de los comandos que utilizas, al fin y al cabo necesitas saber de que sirven las herramientas que usas.
Con la mayoría de comandos puedes usar man <comando>
o el flag --help
. El comando man
por lo general explica todas opciones a detalle y el flag --help
es más un resumen.
Ej.: man mv
imprime el manual del comando mv
.
...
The following options are available:
-f Do not prompt for confirmation before overwriting the destination
path. (The -f option overrides any previous -i or -n options.)
-i Cause mv to write a prompt to standard error before moving a file
that would overwrite an existing file. If the response from the
standard input begins with the character `y' or `Y', the move is
attempted. (The -i option overrides any previous -f or -n
options.)
-n Do not overwrite an existing file. (The -n option overrides any
previous -f or -i options.)
-v Cause mv to be verbose, showing files after they are moved.
...
Por ejemplo aqui podemos ver que tenemos las opciones “-f , -i, -n, -v”.
N.B.:
Existe cierto desacuerdo entre los términos flag y switch, algunos autores lo utilizan de manera intercambiable, y otros mencionan que los switches son en realidad lo que en este post estamos llamando opciones.
Fuentes y lecturas recomendadas:
- [What’s the difference between a flag, an option, and an argument?](https://unix.stackexchange.com/questions/285575/whats-the-difference-between-a-flag-an-option-and-an-argument)
- [Is there a difference between a command line flag and a command line option?](https://superuser.com/questions/1070059/is-there-a-difference-between-a-command-line-flag-and-a-command-line-option)