Lösung 1:
Betrachten Sie zunächst die Bedeutung der Warnung, die Sie zu verbergen versuchen. Theoretisch apt
könnte sich morgen ändern, sie "Distributionen" statt "Pakete" zu nennen (weil es "noch keine stabile CLI-Schnittstelle hat"), und dies würde Ihre Pipeline vollständig zerstören. Eine wahrscheinlichere Änderung wäre eine, die das Wort "Pakete" an mehreren Stellen verwendet, wodurch Ihre Pipeline irrelevante Informationen zurückgibt, anstatt nur die Paketanzahl, nach der Sie suchen.
Aber Sie machen sich darüber wahrscheinlich keine allzu großen Sorgen, und realistisch gesehen gibt es keinen Grund, warum Sie es sein sollten. Die Schnittstelle ist seit Jahren stabil und wird sich wahrscheinlich in absehbarer Zeit nicht ändern. Wie lässt sich diese Warnung also verschwinden?
In der *nix-Welt hat die Ausgabe auf der Kommandozeile im Allgemeinen zwei Varianten, stdout (Standardausgabe) und stderr (Standardfehler). Wohlerzogene Programme senden ihre normale Ausgabe an stdout und alle Warnungen oder Fehlermeldungen an stderr. Wenn Sie also möchten, dass Fehler/Warnungen verschwinden, können Sie dies normalerweise erreichen, indem Sie alle Nachrichten auf stderr mit der Ausgabeumleitung 2>/dev/null
wegwerfen . (Auf Englisch ist das „redirect (>
) den zweiten Ausgangskanal (2
, was stderr ist) zu /dev/null
(was alles dorthin Gesendete einfach wegwirft)".
Die Antwort lautet dann:
$ sudo apt update 2>/dev/null | grep packages | cut -d '.' -f 1
4 packages can be upgraded
Nebenbemerkung:In der Frage wird Ihr Befehl als # sudo apt...
angezeigt . Die #
Shell-Eingabeaufforderung impliziert, dass Sie wahrscheinlich als root angemeldet waren, als Sie diesen Befehl verwendeten. Wenn Sie bereits root sind, müssen Sie sudo
nicht verwenden .
Mehr zu der Warnung, die Sie ignorieren möchten (ab 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.
Lösung 2:
Sie können eine Alternative mit dem folgenden Befehl
verwenden
sudo apt-get -s upgrade | grep -P "\d\K upgraded"
Die Ausgabe sollte so aussehen
6 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Die -s
bedeutet simulieren, aufklären oder Probelauf
aus dem apt-get
Manpages
-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.
Diese Antwort wurde von diesem Blog inspiriert