apt donne un avertissement «Unstable CLI Interface»

63

J'écris un script qui nécessite de lire un fichier contenant les informations d'un paquet pour lequel j'ai écrit cette ligne.

apt show $PACKAGE_NAME > pack_info.txt

Cependant, cela ne crée pas le pack_info.txtfichier et donne toujours cet avertissement:

ATTENTION: apt n'a pas d'interface CLI stable. Utilisez avec prudence dans les scripts.

Pour le moment, j'ai essayé de rediriger à la fois STDOUT& STDERRusing &>et cela a fonctionné pour donner un fichier pack_info.txtdont nous avons besoin.

J'ai aussi essayé d'obtenir du contenu dpkget cela a également fonctionné:

dpkg -s $PACKAGE_NAME > pack_info.txt

Ce qui est bien, c'est que cela ne montre ni un avertissement ni une erreur.

Ce qui est mauvais, c'est que nous ne voulons pas utiliser dpkg et que nous voulons seulement STDOUT ou apt pour rediriger vers un fichier.

J'ai donc trois questions à poser:

  1. Qu'entendons-nous exactement par interface CLI stable?
  2. Comment utiliser de telles commandes en toute sécurité et sans erreur? [S'il vous plaît, veuillez expliquer avec l'exemple]
  3. Existe-t-il un moyen de rediriger uniquement STDOUT of apt showvers un fichier?
C0deDaedalus
la source

Réponses:

81

aptest pour le terminal et donne une belle sortie tandis que apt-getet apt-cachesont pour des scripts et donnent une sortie stable, analysable. L'équivalent script de votre apt showcommande est donc:

apt-cache show $PACKAGE_NAME >pack_info.txt

Maintenant, pour répondre à vos questions une par une:

Qu'entendons-nous exactement par interface CLI stable?

aptLa sortie de n'est pas bien utilisable dans les scripts. Par exemple, apt install(comparé à apt-get install) affiche une barre de progression inutile pour les scripts et peut générer des erreurs lors de l'analyse du résultat. apt show firefoxmontre un indice pour un enregistrement supplémentaire, qui est également totalement inutile dans un script, vous voulez qu'il produise simplement tous les enregistrements là-bas - c'est ce que apt-cache show firefoxfait. Voyons ce man aptque cela dit:

La ligne de commande apt (8) est conçue comme un outil pour l'utilisateur final et peut changer de comportement entre les versions. Bien qu’il essaie de ne pas rompre la compatibilité avec les versions antérieures, cela n’est pas garanti non plus si un changement semble avantageux pour une utilisation interactive.

Toutes les fonctionnalités d' apt (8) sont disponibles dans des outils APT dédiés tels qu'apt-get (8) et apt-cache (8). apt (8) modifie simplement la valeur par défaut de certaines options (voir apt.conf (5) et plus précisément la portée binaire). Vous devriez donc préférer utiliser ces commandes (éventuellement avec certaines options supplémentaires activées) dans vos scripts car elles préservent la compatibilité avec les versions antérieures autant que possible.


Comment utiliser de telles commandes en toute sécurité et sans erreur?

Il suffit d'utiliser apt-getou apt-cacherespectivement au lieu de plain apt. :) Voir cette réponse pour une liste d'équivalents.


Existe-t-il un moyen de ne rediriger que STDOUT d’apt show vers un fichier?

Vous avez déjà fait cela correctement: >fileou 1>fileredirige stdout, 2>fileredirige stderr et &>fileredirige les deux file.

dessert
la source