apt dà un avviso "Interfaccia CLI instabile"


63

Sto scrivendo uno script che deve leggere un file contenente le informazioni di un pacchetto per il quale ho scritto questa riga

apt show $PACKAGE_NAME > pack_info.txt

Tuttavia, questo non crea il pack_info.txtfile e fornisce sempre questo avviso:

ATTENZIONE: apt non ha un'interfaccia CLI stabile. Usare con cautela negli script.

Per il momento ho provato a reindirizzare entrambi STDOUTe STDERRusando &>e ha funzionato per dare un file di pack_info.txtcui abbiamo bisogno.

Ho anche provato a ottenere contenuti da dpkge che ha funzionato anche:

dpkg -s $PACKAGE_NAME > pack_info.txt

Ciò che è buono che non mostra né un avviso né un errore.

La cosa brutta è che non vogliamo usare dpkg e vogliamo solo che STDOUT di apt reindirizzi a un file.

Quindi, ho tre domande da porre:

  1. Cosa intendiamo esattamente per interfaccia CLI stabile?
  2. Come utilizzare in modo sicuro e senza errori tali comandi negli script? [ti preghiamo di spiegare con esempio]
  3. C'è un modo per reindirizzare solo e solo STDOUT su apt showun file?

Risposte:


80

aptè per il terminale e fornisce un output eccezionale mentre apt-gete lo apt-cachesono per gli script e fornisce un output stabile e analizzabile. apt showPertanto, l' equivalente di script del tuo comando è:

apt-cache show $PACKAGE_NAME >pack_info.txt

Ora per rispondere alle tue domande una ad una:

Cosa intendiamo esattamente per interfaccia CLI stabile?

aptL'output non è ben utilizzabile negli script. Ad esempio, apt install(rispetto a apt-get install) visualizza una barra di avanzamento che è inutile per gli script e può generare errori quando viene analizzato l'output. apt show firefoxmostra un suggerimento per un record aggiuntivo, che è anche del tutto inutile in uno script, vuoi semplicemente produrre ogni record lì - ecco cosa apt-cache show firefoxfa. Vediamo cosa man aptc'è da dire al riguardo:

La riga di comando apt (8) è progettata come uno strumento per l'utente finale e può cambiare il comportamento tra le versioni. Anche se tenta di non interrompere la compatibilità con le versioni precedenti, ciò non è garantito se una modifica sembra vantaggiosa per l'uso interattivo.

Tutte le funzionalità di apt (8) sono disponibili anche in strumenti APT dedicati come apt-get (8) e apt-cache (8). apt (8) modifica semplicemente il valore predefinito di alcune opzioni (vedi apt.conf (5) e in particolare l'ambito binario). Quindi dovresti preferire usare questi comandi (potenzialmente con alcune opzioni aggiuntive abilitate) nei tuoi script in quanto mantengono il più possibile la retrocompatibilità.


Come utilizzare in modo sicuro e senza errori tali comandi negli script?

Basta usare apt-geto apt-cacherispettivamente invece di semplice apt. :) Vedi questa risposta per un elenco di equivalenti.


C'è un modo per reindirizzare solo e solo STDOUT di apt show su un file?

Lo hai già fatto correttamente: >fileo 1>filereindirizza stdout, 2>filereindirizza stderr e &>filereindirizza entrambi a file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.