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

iBug
sumber
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.
...
tu-Reinstate Monica-dor duh
sumber
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)
cmak.fr
sumber
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.

iBug
sumber