Зробіть так, щоб “apt-get update” відображав точний вихід як “apt update”


8

Я вивчаю інтерфейс CLI вдосконаленого інструменту упаковки. З висновку, apt(8)коли його stdout не є терміналом, він не підходить для "сценаріїв, які очікують стабільного інтерфейсу програмування", тому я розглядаю apt-get(8).

Одна відмінність apt updateі apt-get updateполягає в тому, що в останньому відсутній заключний рядок після того, як весь кеш буде оновлено:

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

Я хочу знати, як я можу відобразити цю точну лінію apt-get(8).


Наскільки я знав, apt(Розширений інструмент упаковки) і apt-getце різні речі. Вони створені для того, щоб бігати інакше, ніж я зрозумів. Якщо хтось дає вам те, що ви хочете, можливо, зробіть звичку використовувати цю команду замість цього.
Wynter

Відповіді:


9

man apt-get показує:

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

Тож якщо ви просто зробите:

apt-get upgrade --dry-run

він виведе:

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

Так, я пройшов man 8 apt-getі знайшов цей варіант, але вихід відрізнявся від apt.
iBug

Як по-різному? Я щойно перевірив свою систему і вона однакова. Я подумав, що це ідентично, тому що aptце дійсно програмна обгортка навколо, apt-getі ось чому існує попередження.
tu-Reinstate Monica-dor duh

aptпоказує 8 packages can be upgraded. Run 'apt list --upgradable' to see them., а ваша відповідь показує4 to upgrade, 0 to newly install, 0 to remove and 0 not to upgrade.
iBug

1
Так, це тому, що у вас є 8, щоб оновити там, де у мене є 4. Або ви посилаєтесь на те, що текст відрізняється?
tu-Reinstate Monica-dor duh

4
Так, саме про це йдеться в попередженні. aptне гарантують вам цей текст, і вони можуть навіть не гарантувати вам це число. apt-getоднак має суворі вимоги до виводу, оскільки його використовують інші програмні засоби (наприклад, інтерфейси користувача та демон) для їх обробки різними способами. Таким чином, ви можете або змінити свій код, щоб прийняти apt-getвихід, або | sed 's/to upgrade/packages can be upgraded/g', наприклад, (і ризикнути ваш код згодом зламати).
tu-Reinstate Monica-dor duh

4

Здогадуючись, що вам потрібно обробити кількість доступних оновлень, ось вам пропозиція:

# 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

Немає потреби в судо
З виходом легко працювати

Більше опцій:

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

Це саме те, що використовується для створення motdвходу в SSH?
iBug

так, це схоже на той самий вихід, але я не знаю, як це робити
cmak.fr

2

Від man 8 apt:

... дозволяє деякі варіанти ...

Потім я пройшов /usr/share/doc/apt/examples/configure-index.gz(використовуючи zcat(1)для показу текстовий вміст) і помітив цей варіант:

apt::cmd::show-update-stats

Тому я опрацював таку команду, яка робила саме те, що я хотів:

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

Перевірено, що працює над Xenial та Bionic.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.