Řešení 1:
Nejprve zvažte význam varování, které se snažíte skrýt. Teoreticky apt
mohl by se zítra změnit na „distribuce“ místo „balíčky“ (protože „zatím „nemá stabilní rozhraní CLI“), což by zcela přerušilo váš kanál. Pravděpodobnější změnou by byla změna, která používá slovo „balíčky“ na více místech, což způsobí, že váš kanál bude vracet nadbytečné informace namísto pouze počtu balíčků, které hledáte.
Ale pravděpodobně se tím příliš netrápíte a reálně neexistuje žádný důvod, proč byste se tím měli znepokojovat. Rozhraní je již léta stabilní a pravděpodobně se v dohledné době nezmění. Jak tedy zajistíte, aby toto varování zmizelo?
Ve světě *nix má výstup na příkazový řádek obecně dvě varianty, stdout (standardní výstup) a stderr (standardní chyba). Dobře fungující programy posílají svůj normální výstup na stdout a všechna varování nebo chybová hlášení na stderr. Pokud tedy chcete, aby chyby/varování zmizely, můžete toho obvykle dosáhnout zahozením všech zpráv na stderr pomocí přesměrování výstupu 2>/dev/null
. (V angličtině je to „přesměrování (>
) druhý výstupní kanál (2
, což je stderr) na /dev/null
(který prostě zahodí vše, co tam bylo poslané)“.
Odpověď tedy zní:
$ sudo apt update 2>/dev/null | grep packages | cut -d '.' -f 1
4 packages can be upgraded
Poznámka:V otázce je váš příkaz zobrazen jako # sudo apt...
. #
shell prompt znamená, že jste byli pravděpodobně přihlášeni jako root při použití tohoto příkazu. Pokud již jste root, nemusíte používat sudo
.
Další informace o varování, které chcete ignorovat (z 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.
Řešení 2:
Můžete použít alternativu s následujícím příkazem
sudo apt-get -s upgrade | grep -P "\d\K upgraded"
Výstup by měl být takto
6 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
-s
znamená simulovat, recon nebo dry run
z apt-get
manuálové stránky
-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.
Tato odpověď byla inspirována tímto blogem