Buat "pembaruan apt-get" menunjukkan output yang tepat sebagai `apt update`


8

Saya sedang mempelajari antarmuka CLI dari Advanced Packaging Tool. Dari output apt(8)ketika stdout-nya bukan terminal, itu tidak cocok untuk "skrip mengharapkan antarmuka pemrograman yang stabil", jadi saya melihat apt-get(8).

Satu perbedaan antara apt updatedan apt-get updateadalah bahwa yang terakhir tidak memiliki baris akhir setelah semua cache diperbarui:

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

Saya ingin tahu cara menampilkan garis persis ini apt-get(8).


Sejauh yang saya tahu, apt(Alat Pengemasan Lanjutan) dan apt-gethal-hal yang berbeda. Mereka dirancang untuk berjalan berbeda dari apa yang saya mengerti. Jika seseorang memberi Anda apa yang Anda inginkan, mungkin biasakan menggunakan perintah itu sebagai gantinya.
— Brenden McFarling

Jawaban:


9

man apt-get menunjukkan:

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

Jadi, jika Anda hanya melakukannya:

apt-get upgrade --dry-run

itu akan menampilkan:

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

Ya, saya pergi man 8 apt-getdan menemukan opsi itu, tetapi hasilnya berbeda apt.
— iBug

Beda bagaimana? Saya baru saja memeriksa sistem saya dan itu identik. Saya pikir itu identik karena aptbenar-benar pembungkus terprogram apt-getdan itulah alasan mengapa peringatan itu ada.
— tu-Reinstate Monica-dor duh

aptmenunjukkan 8 packages can be upgraded. Run 'apt list --upgradable' to see them., sementara jawaban Anda menunjukkan4 to upgrade, 0 to newly install, 0 to remove and 0 not to upgrade.
— iBug

1
Ya, itu karena Anda memiliki 8 untuk memutakhirkan di mana saya memiliki 4. Atau apakah Anda merujuk pada teks yang berbeda?
— tu-Reinstate Monica-dor duh

4
Ya, itulah tepatnya peringatan itu. apttidak akan menjamin Anda teks itu, dan mereka bahkan mungkin tidak menjamin Anda nomor itu. apt-getnamun memiliki persyaratan keluaran yang ketat karena digunakan oleh perangkat lunak lain (seperti UI dan daemon) untuk memprosesnya dengan berbagai cara. Jadi Anda dapat mengubah kode Anda untuk menerima apt-getoutput atau Anda dapat | sed 's/to upgrade/packages can be upgraded/g', misalnya (dan mengambil risiko melanggar kode Anda nanti).
— tu-Reinstate Monica-dor duh

4

Menebak Anda perlu menangani jumlah pembaruan yang tersedia, berikut adalah sarannya:

# 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

Tidak perlu sudo
Outputnya mudah dikerjakan

Lebih banyak pilihan:

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

Apakah ini hal yang tepat digunakan untuk menghasilkan motdpada login SSH?
— iBug

ya sepertinya output yang sama, tetapi saya tidak tahu bagaimana cara motd
— cmak.fr

2

Dari man 8 apt:

... mengaktifkan beberapa opsi ...

Lalu saya pergi /usr/share/doc/apt/examples/configure-index.gz(menggunakan zcat(1)untuk menampilkan konten teks) dan melihat opsi ini:

apt::cmd::show-update-stats

Jadi saya mengerjakan perintah berikut yang melakukan persis apa yang saya inginkan:

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

Diuji bekerja pada Xenial dan Bionic.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.