Solución 1:
Primero, considere el significado de la advertencia que está tratando de ocultar. En teoría, apt
podría cambiar mañana para llamarlos "distribuciones" en lugar de "paquetes" (porque "todavía no tiene una interfaz CLI estable") y esto interrumpiría por completo su canalización. Un cambio más probable sería uno que use la palabra "paquetes" en varios lugares, lo que hace que su canalización devuelva información superflua en lugar de solo el número de paquetes que está buscando.
Pero probablemente no esté demasiado preocupado por eso y, siendo realistas, no hay razón para que lo esté. La interfaz se ha mantenido estable durante años y probablemente no cambiará en el corto plazo. Entonces, ¿cómo haces que esa advertencia desaparezca?
En el mundo *nix, la salida a la línea de comando es generalmente de dos tipos, stdout (salida estándar) y stderr (error estándar). Los programas que se comportan bien envían su salida normal a stdout y cualquier advertencia o mensaje de error a stderr. Por lo tanto, si desea que desaparezcan los errores/advertencias, generalmente puede lograrlo descartando cualquier mensaje en stderr usando la redirección de salida 2>/dev/null
. (En inglés, eso es "redirect (>
) el segundo canal de salida (2
, que es stderr) a /dev/null
(que simplemente tira todo lo que se envía allí)".
La respuesta, entonces, es:
$ sudo apt update 2>/dev/null | grep packages | cut -d '.' -f 1
4 packages can be upgraded
Nota al margen:en la pregunta, su comando se muestra como # sudo apt...
. El #
El indicador de shell implica que probablemente haya iniciado sesión como root cuando usó ese comando. Si ya eres root, no necesitas usar sudo
.
Más información sobre la advertencia que desea ignorar (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.
Solución 2:
Puede usar una alternativa con el siguiente comando
sudo apt-get -s upgrade | grep -P "\d\K upgraded"
La salida debería ser así
6 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
El -s
significa simular, reconocer o ejecutar en seco
del apt-get
páginas de manual
-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.
Esta respuesta fue inspirada por este blog