Terminal (¿bash?) / Docker: lógica detrás – y –

Durante tres días estoy aprendiendo a trabajar con Docker. Durante esto ejecuté commands como

sudo docker run --rm -ti --net=example --name server ubuntu:14.04 bash 

y

  nc -lp 1234 

Me estaba preguntando por qué tengo que usar a veces un - y para otros commands a -- ¿Hay alguna lógica?

Respecto al tema de mi pregunta: soy consciente de que no es un buen tema. Lo siento por eso. Esta pregunta ocurrió mientras trabajaba con Docker, pero no sé si el tema - o -- es más un tema de terminal o acoplador.

Depende del command. Hay convenciones, pero ninguna de ellas se sigue universalmente.

En los Old Days, las opciones eran cartas sueltas. Si una opción tomara un argumento, podría seguir la letra de opción con o sin un espacio intermedio ( command -x foo o command -xfoo ).

Las opciones que no toman arguments se pueden agrupar, por lo que el command -x -y se puede escribir como command -xy . Para muchos commands, incluso las opciones que toman arguments se pueden agrupar, con la última opción especificada tomando el argumento: command -x -y foo vs. command -xy foo . El nc -lp 1234 en su pregunta es un ejemplo de esto; l y p son dos opciones diferentes. Eso también podría haber sido escrito como nc -l -p 1234 .

Los commands del proyecto GNU generalmente pueden aceptar opciones, ya sea en la forma corta tradicional o en una forma larga, donde el nombre de la opción es una palabra completa que puede abreviarse siempre que la abreviatura sea única. Por ejemplo, ls tiene una opción -F para anexar a / a nombres de directory y demás. Gnu ls permite que esto se especifique como --classify , o abreviado como --cl . Para evitar la ambigüedad y la compatibilidad con versiones anteriores, las opciones de una sola letra antiguas usan una sola, mientras que las opciones de formatting largo usan -- .

Finalmente, algunos commands toman opciones con nombres largos introducidos por un solo - ; el command find es un ejemplo de esto.

La única solución real es leer la página man para el command específico que está ejecutando.

Un solo trazo puede ser seguido por múltiples banderas de un solo personaje. Un doble guion es seguido por un solo indicador de varios caracteres.

en tu caso

 sudo docker run --rm -ti --net=example --name server ubuntu:14.04 bash 

banderas

 rm (multi-character) t (single) i (single) net (multi-character) name (multi-character) 

,

 nc -lp 1234 

banderas

 l (single) p (single)