web-dev-qa-db-fra.com

apt donne un avertissement «Unstable CLI Interface»

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 fichier pack_info.txt 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 STDOUT & STDERR en utilisant &> et nous avons trouvé un fichier pack_info.txt dont nous avons besoin.

J'ai aussi essayé d'obtenir le contenu de dpkg et 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 ne rediriger que STDOUT de apt show vers un fichier?
40
C0deDaedalus

apt est pour le terminal et donne une belle sortie tandis que apt-get et apt-cache sont pour des scripts et donnent une sortie stable et analysable. L'équivalent de script de votre commande apt show 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?

La sortie de apt n'est pas bien utilisable dans les scripts. Par exemple, apt install (par rapport à 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 firefox affiche un indice pour un enregistrement supplémentaire, ce qui est également totalement inutile dans un script. Vous voulez qu'il produise simplement tous les enregistrements . C'est ce que fait apt-cache show firefox. Voyons ce que man apt a à dire à ce sujet:

La ligne de commande apt apt (8) est conçue comme un outil pour l'utilisateur final et peut modifier le 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 de apt (8) sont disponibles dans des outils dédiés APT tels que apt-get (8) et apt-cache (8) également. 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?

Utilisez simplement apt-get ou apt-cache respectivement au lieu de plain apt. :) Voir cette réponse pour une liste d'équivalents.


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

Vous l'avez déjà fait correctement: >file ou 1>file redirige stdout, 2>file redirige stderr et &>file redirige les deux vers file.

59
dessert