Solution 1 :
Considérez d'abord 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" (parce qu'il "n'a pas encore d'interface CLI stable") et cela casserait complètement votre pipeline. Un changement plus probable serait celui qui utilise le mot "packages" à 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, de manière réaliste, il n'y a aucune raison que vous le soyez. L'interface est stable depuis des années et ne changera probablement pas de sitôt. Alors, comment faire disparaître cet avertissement ?
Dans le monde *nix, la sortie vers la ligne de commande est généralement de deux types, stdout (sortie standard) et stderr (erreur standard). Les programmes qui se comportent bien envoient leur sortie normale à stdout et tous les avertissements ou messages d'erreur à stderr. Donc, si vous voulez que les erreurs/avertissements disparaissent, vous pouvez généralement y parvenir 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
Remarque complémentaire :dans la question, votre commande est affichée sous la forme # 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.
Solution 2 :
Vous pouvez utiliser une alternative avec la commande suivante
sudo apt-get -s upgrade | grep -P "\d\K upgraded"
La sortie devrait ressembler à ceci
6 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Le -s
signifie simuler, recon ou essai à blanc
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 ce blog