web-dev-qa-db-fra.com

Comment désactiver "AVERTISSEMENT: apt n'a pas d'interface CLI stable ..."

J'essaie d'écrire un script qui produira le nombre de packages pouvant être mis à niveau depuis apt. Cependant, il continue de me donner cet avertissement:

# Sudo apt update | grep packages | cut -d '.' -f 1

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

All packages are up to date

Je voudrais qu'il affiche simplement:

All packages are up to date

ou

35 packages can be updated

Existe-t-il un moyen de désactiver cet avertissement? J'utiliserai cette chaîne retournée, ainsi que des informations supplémentaires, dans une notification Discord provenant d'un travail cron et cela gâche ma sortie assez méchamment.

J'ai déjà regardé ces derniers, mais aucun d'eux n'a fonctionné pour moi:

https://askubuntu.com/questions/49958/how-to-find-the-number-of-packages-needing-update-from-the-command-line

https://unix.stackexchange.com/questions/19470/list-available-updates-but-do-not-install-them

https://askubuntu.com/questions/269606/apt-get-count-the-number-of-updates-available

7
CorruptComputer

Tout d'abord, réfléchissez à la signification de l'avertissement que vous essayez de masquer. En théorie, apt pourrait changer demain en les appelant "distributions" au lieu de "packages" (car il "n'a pas encore d'interface CLI stable") et cela casserait complètement votre pipeline. Un changement plus probable serait celui qui utilise les "packages" Word à plusieurs endroits, ce qui obligerait votre pipeline à renvoyer des informations superflues au lieu du seul nombre de packages que vous recherchez.

Mais vous n'êtes probablement pas trop inquiet à ce sujet, et, en réalité, il n'y a aucune raison pour que vous le soyez. L'interface est stable depuis des années et ne changera probablement pas de sitôt. Alors, comment faites-vous pour que cet avertissement disparaisse?

Dans le monde * nix, la sortie vers la ligne de commande est généralement de deux versions, stdout (sortie standard) et stderr (erreur standard). Les programmes qui se comportent bien envoient leur sortie normale à stdout et tout avertissement ou message d'erreur à stderr. Donc, si vous voulez que les erreurs/avertissements disparaissent, vous pouvez généralement le faire en jetant tous les messages sur stderr en utilisant la redirection de sortie 2>/dev/null. (En anglais, c'est "redirect (>) le deuxième canal de sortie (2, qui est stderr) à /dev/null (qui jette tout ce qui y est envoyé) ".

La réponse est donc:

$ Sudo apt update 2>/dev/null | grep packages | cut -d '.' -f 1
4 packages can be upgraded

Note latérale: dans la question, votre commande est représentée par # Sudo apt.... Le # L'invite du shell implique que vous étiez probablement connecté en tant que root lors de l'utilisation de cette commande. Si vous êtes déjà root, vous n'avez pas besoin d'utiliser Sudo.


En savoir plus sur l'avertissement que vous souhaitez ignorer (à partir de man apt):

SCRIPT USAGE
       The apt(8) commandline is designed as a end-user tool and it may change
       the output between versions. While it tries to not break backward
       compatibility there is no guarantee for it either. All features of
       apt(8) are available in apt-cache(8) and apt-get(8) via APT options.
       Please prefer using these commands in your scripts.
6
Dave Sherohman

Vous pouvez utiliser une alternative avec la commande suivante

Sudo apt-get -s upgrade | grep -P "\d\K upgraded"

La sortie doit être comme ceci

6 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Le -s signifie simulation, reconnaissance ou essai à sec

du apt-get pages de manuel

       -s, --simulate, --just-print, --dry-run, --recon, --no-act
           No action; perform a simulation of events that would occur based on
           the current system state but do not actually change the system.
           Locking will be disabled (Debug::NoLocking) so the system state
           could change while apt-get is running. Simulations can also be
           executed by non-root users which might not have read access to all
           apt configuration distorting the simulation. A notice expressing
           this warning is also shown by default for non-root users
           (APT::Get::Show-User-Simulation-Note). Configuration Item:
           APT::Get::Simulate.

Cette réponse a été inspirée par cela blog

2
Kerolos William

Vous pouvez simplement diriger l'erreur vers/dev/null

user@Host:~$ Sudo apt update | grep packages

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

34 packages can be upgraded. Run 'apt list --upgradable' to see them.
user@Host:~$ Sudo apt update 2>/dev/null | grep packages
34 packages can be upgraded. Run 'apt list --upgradable' to see them.
user@Host:~$
0
Þór Sigurðsson