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 -f
opção. 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 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: su
significa '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 f
sinalizador 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 gzip
si mesmo, especificando o z
sinalizador:
tar xfz filename
– Não há necessidade de ligar gzip
explicitamente.