¿Qué significa "-" en los comandos de terminal?


23

He visto muchos tutoriales que usan --comandos posteriores. Algo como esto:

command -- 

¿Qué significa esto --?


¿Qué videos tutoriales?
TheWanderer


En realidad, me sorprende que esta pregunta no haya sido un engaño en AU. ¿Las preguntas idénticas en otras comunidades de StackExchange no cuentan como engaños (a saber, el enlace proporcionado por @edwinksl)? ¿Cuál es la opinión sobre eso? Tal vez debería preguntar eso en META ...
Cbhihe

@Cbhihe No conozco un mecanismo que nos permita apuntar a objetivos duplicados de otros sitios de SE. De todos modos, no sucede con demasiada frecuencia, por lo que probablemente no sea necesario.
edwinksl

3
@ anonymous2 ¿por qué demonios haríamos eso? La pregunta es sobre el tema aquí, por lo que puede quedarse. Moverlo eliminaría información de AU y no agregaría nada nuevo a U&L, por lo que no veo por qué sería algo bueno.
terdon

Respuestas:


46

El --se utiliza para indicar el final de las opciones de línea de comando. Esto le permite usar argumentos que comienzan con --. Por ejemplo, si crea un archivo llamado --foo:

$ > '--foo'
$ ls
--foo

Y luego intente eliminarlo, rmpensará que le está dando un argumento:

$ rm --foo 
rm: unrecognized option '--foo'
Try 'rm ./--foo' to remove the file '--foo'.
Try 'rm --help' for more information.

Una forma de evitar esto es usar --:

$ rm -- --foo

Esta es una práctica común y recomendada por POSIX , por lo que es compatible con muchos programas.


13
Bash no lo implementa en absoluto. Que es una característica del rmprograma y de muchas utilidades compatibles con POSIX. Ver directriz 10 . Para comprobar que Bash no está haciendo el trabajo (y eso no tendría sentido), simplemente cree un pequeño script con just printf '> %s <\n' "$@"y ejecútelo con --.
gniourf_gniourf

3
@gniourf_gniourf d'oh! Verifiqué escribiendo un pequeño script perl que imprime sus opciones y no ve ninguno si lo pasa --, pero, por supuesto, eso es simplemente porque el módulo Perl relevante ( getopts) también lo admite. Tienes toda la razón, solo busqué rápidamente man bash, vi la sección que había citado pero no me di cuenta de que estaba en la sección "opciones de línea de comando". Gracias por la corrección, respuesta editada.
terdon

1

La mayoría de los comandos usarán un - para indicarle al comando que otros parámetros deben tratarse de manera diferente. Un ejemplo es el rm - --filename mencionado anteriormente. Otro ejemplo, un script como 'startx' se interpretará todo antes y pasará todo al servidor X.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.