Fai "apt-get update" per mostrare l'output esatto come `apt update`


8

Sto imparando l'interfaccia della CLI di Advanced Packaging Tool. Dall'output di apt(8)quando il suo stdout non è un terminale, non è adatto per "script che prevedono un'interfaccia di programmazione stabile", quindi sto dando un'occhiata apt-get(8).

Una differenza tra apt updatee apt-get updateè che a quest'ultima manca un'ultima riga dopo che tutta la cache è stata aggiornata:

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

Voglio sapere come posso visualizzare questa riga esatta con apt-get(8).


Per quanto ne sapevo, apt(Advanced Packaging Tool) e apt-getsono cose diverse. Sono progettati per funzionare in modo diverso da quello che ho capito. Se uno ti dà quello che vuoi, forse prendi l'abitudine di usare quel comando invece.
— Brenden McFarling,

Risposte:


9

man apt-get Spettacoli:

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

Quindi se fai solo:

apt-get upgrade --dry-run

produrrà:

...
4 to upgrade, 0 to newly install, 0 to remove and 0 not to upgrade.
...

Sì, ho esaminato man 8 apt-getquesta opzione, ma l'output era diverso da apt.
— iBug

Diverso come? Ho appena controllato il mio sistema ed è identico. Ho pensato che fosse identico perché in aptrealtà è un wrapper programmatico apt-geted è per questo che esiste l'avvertimento.
— tu-Reinstate Monica-dor duh

aptmostra 8 packages can be upgraded. Run 'apt list --upgradable' to see them., mentre la tua risposta mostra4 to upgrade, 0 to newly install, 0 to remove and 0 not to upgrade.
— iBug

1
Sì, è perché hai 8 da aggiornare dove ne ho 4. O ti riferisci al fatto che il testo è diverso?
— tu-Reinstate Monica-dor duh

4
Sì, questo è esattamente ciò di cui parla l'avvertimento. aptnon ti garantiranno quel testo e potrebbero anche non garantirti quel numero. apt-gettuttavia ha un rigoroso requisito di output perché viene utilizzato da altri software (come interfacce utente e demoni) per elaborarlo in vari modi. Quindi puoi modificare il tuo codice per accettare apt-getl'output o | sed 's/to upgrade/packages can be upgraded/g', ad esempio, puoi (e rischiare che il tuo codice venga infranto in seguito).
— tu-Reinstate Monica-dor duh

4

Supponendo che tu debba gestire il numero di aggiornamenti disponibili, ecco un suggerimento:

# 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

Non c'è bisogno di sudo
L'output è facile da lavorare

Più opzioni:

> /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)

È questa la cosa esatta usata per generare motdil login SSH?
— iBug

sì, sembra lo stesso output, ma non so come fa motd
— cmak.fr

2

Da man 8 apt:

... abilita alcune opzioni ...

Poi ho passato /usr/share/doc/apt/examples/configure-index.gz(usando zcat(1)per mostrare il contenuto del testo) e ho notato questa opzione:

apt::cmd::show-update-stats

Quindi ho elaborato il seguente comando che ha fatto esattamente quello che volevo:

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

Testato per lavorare su Xenial e Bionic.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.