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


63

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

apt show $PACKAGE_NAME > pack_info.txt

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

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

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

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

dpkg -s $PACKAGE_NAME > pack_info.txt

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

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

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

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

Ответы:


80

aptпредназначен для терминала и дает прекрасный вывод while 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) и, в частности, область Binary). Поэтому вы должны предпочесть использовать эти команды (возможно, с некоторыми дополнительными опциями) в ваших скриптах, так как они максимально поддерживают обратную совместимость.


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

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


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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.