apt dá aviso de “Unstable CLI Interface”

13

Estou escrevendo um script que precisa ler um arquivo contendo informações de um pacote para o qual eu escrevi esta linha

apt show $PACKAGE_NAME > pack_info.txt

No entanto, isso não cria o arquivo pack_info.txt e sempre fornece esse aviso:

  

AVISO: o apt não possui uma interface CLI estável. Use com cuidado em scripts.

Por enquanto, tentei redirecionar os dois STDOUT & amp; STDERR usando &> e deu certo para dar um arquivo pack_info.txt que precisamos.

Eu também tentei obter conteúdo de dpkg e isso também funcionou:

dpkg -s $PACKAGE_NAME > pack_info.txt

O que é bom que não mostra um aviso nem um erro.

O que é ruim é que não queremos usar o dpkg e só queremos que o STDOUT do apt redirecione para o arquivo.

Então, tenho três perguntas para fazer:

  1. O que exatamente queremos dizer com a interface CLI estável?
  2. Como usar esses comandos em scripts com segurança e sem erros? [por favor, se preocupe em explicar com o exemplo]
  3. Existe uma maneira de redirecionar apenas e somente STDOUT de apt show para um arquivo?
por C0deDaedalus 30.12.2017 / 15:28

1 resposta

29

Isso é bem simples: apt é para o terminal e dá uma saída bonita, enquanto apt-get e apt-cache são para scripts e fornecem uma saída estável e analisável. O script equivalente ao seu comando apt show , portanto, é:

apt-cache show $PACKAGE_NAME >pack_info.txt

Agora, responda às suas perguntas, uma por uma:

  

O que exatamente queremos dizer com a interface CLI estável?

A saída de

apt não é bem utilizável em scripts. Por exemplo, apt install (comparado a apt-get install ) exibe uma barra de progresso que é inútil para scripts e pode gerar erros quando a saída é analisada. apt show firefox mostra uma dica para um registro adicional, que também é totalmente inútil em um script, você quer que simplesmente gere um todos os registros lá - é o que o apt-cache show firefox faz. Vamos ver o que o man apt tem a dizer sobre isso:

  

A linha de comando apt (8) é projetada como uma ferramenta de usuário final e pode   mude o comportamento entre versões. Enquanto ele          tenta não quebrar a compatibilidade com versões anteriores isso não é garantido se uma mudança parece benéfica para          uso interativo.

     

Todos os recursos do apt (8) estão disponíveis em ferramentas dedicadas do APT, como apt-get (8) e apt-cache (8 ) também. apt (8)          apenas altera o valor padrão de algumas opções (veja apt.conf (5) e especificamente o escopo Binário). Então você          deve preferir usar esses comandos (potencialmente com algumas opções adicionais ativadas) em seus scripts          mantenha a compatibilidade retroativa o máximo possível.

  

Como usar com segurança e sem erros tais comandos em scripts?

Use apenas apt-get ou apt-cache , respectivamente, em vez de apt . :) Veja esta resposta para uma lista de equivalentes.

  

Existe uma maneira de redirecionar somente e somente o STDOUT do apt show para um arquivo?

Você já fez isso corretamente: >file ou 1>file redireciona stdout, 2>file redireciona stderr e &>file redireciona ambos para file .

    
por dessert 30.12.2017 / 16:15