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://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
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.
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
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:~$