Haga que "apt-get update" muestre el resultado exacto como `apt update`

8

Estoy aprendiendo la interfaz CLI de Advanced Packaging Tool. Desde la salida de apt(8)cuando su stdout no es un terminal, no es adecuado para "scripts que esperan una interfaz de programación estable", por lo que estoy echando un vistazo apt-get(8).

Una diferencia entre apt updatey apt-get updatees que a este último le falta una línea final después de que se haya actualizado todo el caché:

8 packages can be upgraded. Run 'apt list --upgradable' to see them.

Quiero saber cómo puedo mostrar esta línea exacta con apt-get(8).

iBug
fuente
Hasta donde yo sabía, apt(Advanced Packaging Tool) y apt-getson cosas diferentes. Están diseñados para funcionar de manera diferente a lo que entendí. Si uno te da lo que quieres, quizás tengas la costumbre de usar ese comando en su lugar.
Brenden McFarling

Respuestas:

9

man apt-get muestra:

   -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.

Entonces, si solo haces:

apt-get upgrade --dry-run

saldrá:

...
4 to upgrade, 0 to newly install, 0 to remove and 0 not to upgrade.
...
tu-Reinstate Monica-dor duh
fuente
Sí, revisé man 8 apt-gety encontré esa opción, pero la salida era diferente apt.
iBug
¿Diferente cómo? Acabo de comprobar mi sistema y es idéntico. Pensé que era idéntico porque aptes realmente una envoltura programática apt-gety esa es la razón por la cual existe la advertencia.
tu-Reinstate Monica-dor duh el
aptmuestra 8 packages can be upgraded. Run 'apt list --upgradable' to see them., mientras que su respuesta muestra4 to upgrade, 0 to newly install, 0 to remove and 0 not to upgrade.
iBug
1
Sí, eso es porque tienes 8 para actualizar donde yo tengo 4. ¿O te refieres a que el texto es diferente?
tu-Reinstate Monica-dor duh el
44
Sí, de eso se trata exactamente la advertencia. aptno le garantizará ese texto, y es posible que ni siquiera le garanticen ese número. apt-getsin embargo, tiene un requisito de salida estricto porque lo utilizan otros softwares (como UI y daemons) para procesarlo de varias maneras. Por lo tanto, puede cambiar su código para aceptar apt-getla salida o puede | sed 's/to upgrade/packages can be upgraded/g', por ejemplo (y arriesgarse a que su código se rompa más tarde).
tu-Reinstate Monica-dor duh el
4

Suponiendo que necesita manejar la cantidad de actualizaciones disponibles, aquí hay una sugerencia:

# With no option, returns two numbers, no CR nor LF
/usr/lib/update-notifier/apt-check

# With --human-readable, returns numbers, locale LANG text & CR/LF
/usr/lib/update-notifier/apt-check  --human-readable

No es necesario sudo
La salida es fácil de trabajar

Mas opciones:

> /usr/lib/update-notifier/apt-check  --help
Usage: apt-check [options]

Options:
  -h, --help            show this help message and exit
  -p, --package-names   Show the packages that are going to be
                        installed/upgraded
  --human-readable      Show human readable output on stdout
  --security-updates-unattended
                        Return the time in days when security updates are
                        installed unattended (0 means disabled)
cmak.fr
fuente
¿Es esto exactamente lo que se usa para generar motden el inicio de sesión SSH?
iBug
sí, parece la misma salida, pero no sé cómo funciona motd
cmak.fr
2

De man 8 apt:

... habilita algunas opciones ...

Luego revisé /usr/share/doc/apt/examples/configure-index.gz(usando zcat(1)para mostrar contenido de texto) y noté esta opción:

apt::cmd::show-update-stats

Así que elaboré el siguiente comando que hizo exactamente lo que quería:

# apt-get -o apt::cmd::show-update-stats=true update

Probado para trabajar en Xenial y Bionic.

iBug
fuente