O que significa o traço "-" no final de um comando?

O que significa o traço "-" no final de um comando?

Dado o seguinte comando:

gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf –

O que -significa no final do comando? É algum tipo de espaço reservado?

Responder1

Neste caso, significa 'entrada padrão'. É usado por alguns softwares (por exemplo, tar) quando um argumento de arquivo é necessário e você precisa usar stdin. Não é uma construção de shell e depende do programa que você está usando. Verifique a página de manual em caso de dúvida!

Neste caso, a entrada padrão é o argumento da -fopção. Nos casos em que -não é suportado, você pode usar algo como tar xvf /proc/self/fd/0ou tar xvf /dev/stdin(o último é amplamente suportado em vários unidades).

Não confie que isso signifique 'entrada padrão' universalmente. Como não é interpretado pelo shell, todo programa é livre para lidar com ele como quiser. Em alguns casos, é padrãosaídaou algo totalmente diferente: susignifica 'iniciar um shell de login'. Em outros casos, não é interpretado de forma alguma. A memória muscular me fez criar alguns arquivos nomeados -porque alguma versão de algum programa com o qual eu estava acostumado não entendia o traço.

Responder2

Nesse caso, -é realmente inútil, supondo que você esteja executando o Linux:

GNU tar (a versão no Linux) aceita sua entrada da entrada padrão por padrão. Se você fizernãodeseja esse comportamento e deseja passar o nome do arquivo como um argumento de linha de comando, então você precisa especificar o sinalizador f:

tar xf filename

Então isso é o mesmo que

tar x < filename

Ou, se a entrada estiver compactada como no seu exemplo:

gzip -dc filename | tar x

Não faz sentido especificar o fsinalizador aqui, mas como ele foi especificado, o nome do arquivo precisa ser fornecido para -indicar que queremos ler a entrada padrão (veja outra resposta). Então, repetindo, isso é redundante e um pouco estranho.

Além disso, a linha acima pode ser simplificada porque o GNU tar pode ser instruído a transmitir a entrada através de gzipsi mesmo, especificando o zsinalizador:

tar xfz filename

– Não há necessidade de ligar gzipexplicitamente.

informação relacionada