O que significa dash “-” no final de um comando?

68

Dado o seguinte comando:

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

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

    
por Eugene S 28.06.2012 / 12:25

2 respostas

74

Nesse caso, significa "entrada padrão". Ele é usado por algum software (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 manpage em caso de dúvida!

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

Não confie nisso para significar "entrada padrão" universalmente. Como não é interpretado pelo shell, todo programa é livre para lidar com isso da maneira que lhe agrada. Em alguns casos, é a saída padrão ou algo totalmente diferente: em su significa "iniciar uma shell de login". Em outros casos, não é interpretado de forma alguma. A memória muscular fez com que eu criasse alguns arquivos chamados - , porque alguma versão de algum programa que eu estava acostumada não acelerou o traço.

    
por 28.06.2012 / 12:29
11

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

O GNU tar (a versão no Linux) aceita sua entrada da entrada padrão por padrão. Se você não quiser esse comportamento e quiser passar o nome do arquivo como um argumento de linha de comando, será necessário especificar o sinalizador f :

tar xf filename

Então, isso é o mesmo que

tar x < filename

Ou, se a entrada for gzipada como no seu exemplo:

gzip -dc filename | tar x

Não é significativo especificar o f flag aqui, mas como foi especificado, o nome do arquivo precisa ser dado como - para indicar que queremos ler da entrada padrão (veja outra resposta) . Então, para repetir, isso é redundante e um pouco estranho.

Além disso, a linha acima pode ser simplificada porque o tar GNU pode ser solicitado para transmitir a entrada através de gzip especificando o z flag:

tar xfz filename

- Não é preciso chamar gzip explicitamente.

    
por 28.06.2012 / 15:48