significado dos traços nus neste exemplo curl / tar

1

Eu sei de esta resposta SO os traços nus são usados por vários utilitários Unix para especificar que o usuário deseja usar stdin ou stdout em vez de um arquivo regular.

No entanto, isso não me ajuda a entender a sintaxe dos itens a seguir (que eu peguei de um buildpack Heroku que basicamente instala uma cópia do Perl em um diretório). No geral, o que está acontecendo é que o Perl está sendo baixado de um URL em $ PERL_PACKAGE e canalizado para o tar, que o extrai para o diretório $ VENDORED_PERL

curl $PERL_PACKAGE -s -o - | tar xzf - -C $VENDORED_PERL

Mas os detalhes são meio confusos. -o é usado quando você deseja especificar um arquivo para a saída em vez do stdout, então não vejo por que você usaria essa opção e, em seguida, um traço, em vez de simplesmente não usar a opção em tudo.

Quanto ao tar, eu acho - está dizendo para não usar um arquivo de entrada, já que ele está recebendo a entrada de um pipe?

Talvez esteja faltando alguns dos requisitos de como os canos funcionam.

    
por Stephen 20.12.2017 / 23:54

2 respostas

1

Eu não acho que você esteja sentindo falta de nada. As opções que você mencionou são desnecessárias em todas as shells e curl e tar implementações que usei nos últimos anos.

Eu escreveria essa linha assim:

curl "$PERL_PACKAGE" -s | tar xz -C "$VENDORED_PERL"

Isto é, sem as opções de nome de arquivo desnecessárias, e com aspas duplas conservadoras das variáveis usadas como argumentos de linha de comando.

Por que eles escreveram da maneira que fizeram? Poderia ser velhos hábitos. Ou alguns sistemas antigos, implementações antigas em que esses parâmetros costumavam ser necessários. E como o script funciona como está, não há nada para "consertar".

    
por 21.12.2017 / 00:01
1

f - significa "lido de stdin" / "write to stdout" com tar também. Mas a origem / destino padrão pode variar entre tar versões e implementações, portanto, parece mais seguro adicioná-lo ao comando.

Se -o - não for necessário para curl , então talvez o autor desse comando não soubesse ou achasse que o comando era mais fácil de entender com essa informação explícita.

    
por 21.12.2017 / 00:03

Tags