O que “-” significa como argumento para um comando?

9

Encontrei este link sobre como abrir o tgz em uma única etapa .

gzip -dc target.tar.gz | tar xf -

O que significa '-'?

ripper234
fonte
11
Além disso, a maioria das versões do tar agora suporta gzip e bzip nativamente. Para um arquivo tar gzip-ed tar xfz target.tar.gze para bziptar xfj target.tar.bz2
Deleted Account

Respostas:

18

É uma convenção comum usar -um argumento de nome de arquivo para significar stdinou stdout; tarsegue a mesma convenção. Na página do manual:

   -f, --file [HOSTNAME:]F
          use archive file or device F (default "-", meaning stdin/stdout)
Michael Mrozek
fonte
11
Isso é apenas uma convenção; você precisa ler a página de manual do comando específico para ver o que -significa para ele. Stdin / stdout é de longe o significado mais comum, mas existem outros. Por exemplo, para algumas versões envsignifica "começar com um ambiente vazio".
Cjm
0

Outra convenção é usar '-' para indicar o final dos sinalizadores e o início dos nomes dos arquivos. Esse comportamento está embutido no getopt (3) no RedHat 4, pelo menos. Não consigo encontrar uma página de manual do Red Hat que use '-' para indicar o fim dos argumentos, todos parecem usar '-' para fazer isso. A página de manual awk possui '-' nesse contexto, portanto, talvez apenas os comandos antigos do Unix ou Solaris da "herança" usem '-' como um argumento - separador de nomes de arquivos.

Bruce Ediger
fonte
3
--sinaliza o fim das opções, então tudo o que vem depois é um operando. -não é uma opção, portanto, e tudo o que vem depois é um operando. Esse é o comportamento padrão . Para muitos comandos, como tar, o operando -significa entrada ou saída padrão . Em muitas conchas, set - -aé equivalente a set -- -a, e em algumas conchas Bourne antigas set - -aera a única forma aceita, mas essa era uma exceção com o setbuilt-in.
Gilles 'SO- stop be evil'
Os programas Solaris seguem principalmente a convenção padrão POSIX de --para separar opções de argumentos.
alanc