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:
apt show
vers un fichier?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
.