O apt envia o aviso “Interface CLI instável”

63

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

apt show $PACKAGE_NAME > pack_info.txt

No entanto, isso não cria o pack_info.txtarquivo e sempre dá este aviso:

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

Por enquanto, tentei redirecionar ambos STDOUTe STDERRusar &>e funcionou para fornecer um arquivo pack_info.txtque precisamos.

Também tentei obter conteúdo dpkge também funcionou:

dpkg -s $PACKAGE_NAME > pack_info.txt

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

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

Então, eu tenho três perguntas a serem feitas:

  1. O que queremos dizer exatamente com interface CLI estável?
  2. Como usar com segurança e sem erros esses comandos nos scripts? [lembre-se de explicar com exemplo]
  3. Existe uma maneira de redirecionar apenas e apenas STDOUT de apt showpara um arquivo?
C0deDaedalus
fonte

Respostas:

80

apté para o terminal e dá saída bela enquanto apt-gete apt-cachesão para scripts e dar saída estável, analisável. O script equivalente ao seu apt showcomando, portanto, é:

apt-cache show $PACKAGE_NAME >pack_info.txt

Agora, para responder às suas perguntas uma a uma:

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

aptA saída de 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 firefoxmostra uma dica para um registro adicional, que também é totalmente inútil em um script, você deseja que ele simplesmente imprima todos os registros lá - é isso que apt-cache show firefoxfaz. Vamos ver o que man apttem a dizer sobre isso:

A linha de comando do apt (8) foi projetada como uma ferramenta do usuário final e pode mudar o comportamento entre as versões. Embora tente não quebrar a compatibilidade com versões anteriores, isso também não é garantido se uma alteração parecer benéfica para o uso interativo.

Todos os recursos do apt (8) estão disponíveis em ferramentas dedicadas do APT, como o apt-get (8) e o apt-cache (8). O apt (8) apenas altera o valor padrão de algumas opções (veja apt.conf (5) e, especificamente, o escopo binário). Portanto, você deve preferir usar esses comandos (possivelmente com algumas opções adicionais ativadas) em seus scripts, pois eles mantêm a compatibilidade com versões anteriores o máximo possível.


Como usar com segurança e sem erros esses comandos nos scripts?

Basta usar apt-getou, apt-cacherespectivamente, em vez de simples apt. :) Veja esta resposta para obter uma lista de equivalentes.


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

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

sobremesa
fonte