O que significa "-" nos comandos do terminal?

23

Eu já vi muitos tutoriais que usam um --comando posterior. Algo assim:

command -- 

O que isso --significa?

Jibril
fonte
Quais tutoriais em vídeo?
TheWanderer
Na verdade, estou surpreso que essa pergunta ainda não tenha sido um engano na UA. Perguntas idênticas em outras comunidades do StackExchange não contam como idiotas (a saber, o link fornecido por @edwinksl)? Qual é a opinião disso? Talvez eu devesse perguntar isso em META ....
Cbhihe
@ CBhihe Não conheço um mecanismo que permita apontar para duplicar alvos de outros sites SE. De qualquer forma, isso não acontece com muita frequência, então provavelmente não há necessidade de um.
Edwinksl
3
@ anonymous2 por que no mundo faríamos isso? A questão está no tópico aqui, para que possa permanecer. Movê-lo removeria as informações da AU e não acrescentaria nada de novo aos U&L; portanto, não vejo por que seria uma coisa boa.
terdon

Respostas:

46

A --é usado para indicar o final de opções de linha de comando. Isso permite que você use argumentos começando com --. Por exemplo, se você criar um arquivo chamado --foo:

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

E, em seguida, tente excluí-lo, rmvocê achará que está argumentando:

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

Uma maneira de contornar isso é usar --:

$ rm -- --foo

Essa é uma prática comum e recomendada pelo POSIX , portanto é suportada por muitos programas.

Terdon
fonte
13
Não é implementado pelo Bash. Ele é uma característica do rmprograma e de muitos utilitários POSIX. Consulte a Diretriz 10 . Para realmente verificar se Bash não está fazendo o trabalho (e isso não faria sentido), basta criar um pequeno script com just printf '> %s <\n' "$@"e iniciá-lo --.
58568 GJB
3
@gniourf_gniourf d'oh! Eu verifiquei escrevendo um pequeno script perl que imprime suas opções e ele não vê nenhum se você o passa --, mas, é claro, isso é simplesmente porque o módulo Perl relevante ( getopts) também o suporta. Você está certo, procurei rapidamente man bash, vi a seção que havia citado, mas não percebi que estava na seção "opções de linha de comando". Obrigado pela correção, resposta editada.
terdon 02/07/16
1

A maioria dos comandos usará a - para informar ao comando que parâmetros adicionais devem ser tratados de maneira diferente. Um exemplo é o rm - --filename mencionado acima. Outro exemplo, um script como 'startx' se interpretará tudo antes - e passará tudo depois para o servidor X.

delt
fonte