Сделайте так, чтобы «apt-get update» показывал точный вывод как «apt update»

8

Я изучаю интерфейс командной строки Advanced Packaging Tool. Исходя из того, apt(8)что его стандартный вывод не является терминалом, он не подходит для «сценариев, ожидающих стабильного интерфейса программирования», поэтому я взгляну на него apt-get(8).

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

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

Я хочу знать, как я могу отобразить эту точную строку apt-get(8).

iBug
источник
Насколько я знал, apt(Advanced Packaging Tool) и apt-getэто разные вещи. Они предназначены для работы не так, как я понял. Если кто-то дает вам то, что вы хотите, возможно, замените эту команду привычкой.
Бренден

Ответы:

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.
...
Tu-Reinstate Моника-Дор Дух
источник
Да, я прошел 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

Не нужно sudo
С выходом легко работать

Больше вариантов:

> /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
источник
Это именно то, что используется для генерации motdпри входе в SSH?
iBug
да, это похоже на тот же вывод, но я не знаю, как работает
Motd
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.

iBug
источник