apt выдает предупреждение «Нестабильный интерфейс CLI»

Я пишу скрипт, который должен прочитать файл, содержащий информацию о пакете, для которого я написал эту строку

apt show $PACKAGE_NAME > pack_info.txt

Однако это не создает файл pack_info.txt и всегда выдает это предупреждение. :

ВНИМАНИЕ: apt не имеет стабильного интерфейса CLI. Используйте с осторожностью в сценариях.

В настоящее время я пытался перенаправить оба STDOUT и amp; STDERR, используя &>, и это дало нам файл pack_info.txt, который нам нужен.

Я также пытался получить содержимое из dpkg, и это также сработало:

dpkg -s $PACKAGE_NAME > pack_info.txt

Что хорошо, что он не показывает ни предупреждение, ни ошибку.

Что плохо, что мы не хотим использовать dpkg и хотим, чтобы STDOUT apt перенаправлял в файл.

Итак, у меня есть три вопроса:

  1. Что именно мы подразумеваем под стабильным интерфейсом CLI?
  2. Как безопасно и безошибочно использовать такие команды в сценариях? [пожалуйста, объясните пример]
  3. Есть ли способ только и только перенаправить STDOUT apt show в файл?
63
задан 30 December 2017 в 18:27

1 ответ

apt для терминала и дает прекрасный вывод, в то время как apt-get и apt-cache для сценариев и дают стабильный, разбираемый вывод. Сценарий, эквивалентный вашей команде apt show, поэтому:

apt-cache show $PACKAGE_NAME >pack_info.txt

Теперь, чтобы ответить на ваши вопросы один за другим:

Что именно мы подразумеваем под стабильным CLI Интерфейс? Выходные данные

apt плохо используются в скриптах. Например, apt install (по сравнению с apt-get install) отображает индикатор выполнения, который бесполезен для сценариев и может выдавать ошибки при разборе вывода. apt show firefox показывает подсказку для дополнительной записи, которая также совершенно бесполезна в скрипте, вы хотите, чтобы она просто выводила каждую запись там - это то, что делает apt-cache show firefox. Давайте посмотрим, что man apt говорит об этом:

Командная строка apt (8) разработана как инструмент конечного пользователя и может изменять поведение между версиями. Хотя он старается не нарушать обратную совместимость, это также не гарантируется, если изменение кажется полезным для интерактивного использования.

Все функции apt (8) также доступны в специализированных инструментах APT, таких как apt-get (8) и apt-cache (8) , apt (8) просто меняет значение по умолчанию для некоторых опций (см. apt.conf (5) и, в частности, двоичную область). Поэтому вы должны предпочесть использовать эти команды (возможно, с некоторыми дополнительными опциями) в ваших скриптах, так как они максимально сохраняют обратную совместимость.


Как безопасно и безошибочно использовать такие команды в сценариях?

Просто используйте apt-get или apt-cache соответственно вместо простого apt , :) См. этот ответ для списка эквивалентов.


Есть ли способ только и только перенаправить STDOUT apt show в файл?

Вы уже сделали это правильно: >file или 1>file перенаправляет stdout , 2>file перенаправляет stderr, а &>file перенаправляет оба на file.

64
ответ дан 30 December 2017 в 18:27

Другие вопросы по тегам:

Похожие вопросы: