Soluzione 1:
Innanzitutto, considera il significato dell'avvertimento che stai cercando di nascondere. In teoria, apt
potrebbe cambiare domani chiamandole "distribuzioni" invece di "pacchetti" (perché "non ha ancora un'interfaccia CLI stabile") e questo interromperebbe completamente la tua pipeline. Una modifica più probabile sarebbe quella che utilizza la parola "pacchetti" in più punti, facendo sì che la tua pipeline restituisca informazioni estranee invece del solo numero di pacchetti che stai cercando.
Ma probabilmente non sei troppo preoccupato per questo e, realisticamente, non c'è motivo per cui dovresti esserlo. L'interfaccia è rimasta stabile per anni e probabilmente non cambierà presto. Allora come fai a far sparire quell'avvertimento?
Nel mondo *nix, l'output sulla riga di comando è generalmente di due versioni, stdout (output standard) e stderr (errore standard). I programmi ben educati inviano il loro output normale a stdout e qualsiasi avviso o messaggio di errore a stderr. Quindi, se vuoi che gli errori/avvisi scompaiano, di solito puoi farlo eliminando tutti i messaggi su stderr usando il reindirizzamento dell'output 2>/dev/null
. (In inglese, è "reindirizzamento (>
) il secondo canale di uscita (2
, che è stderr) a /dev/null
(che semplicemente butta via tutto ciò che è stato inviato lì)".
La risposta, quindi, è:
$ sudo apt update 2>/dev/null | grep packages | cut -d '.' -f 1
4 packages can be upgraded
Nota a margine:nella domanda, il tuo comando è mostrato come # sudo apt...
. Il #
il prompt della shell implica che probabilmente eri connesso come root quando hai usato quel comando. Se sei già root, non è necessario utilizzare sudo
.
Maggiori informazioni sull'avviso che vuoi ignorare (da 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.
Soluzione 2:
Puoi usare un'alternativa con il seguente comando
sudo apt-get -s upgrade | grep -P "\d\K upgraded"
L'output dovrebbe essere così
6 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Il -s
significa simulazione, ricognizione o prova
dal apt-get
pagine man
-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.
Questa risposta è stata ispirata da questo blog