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 of apt перенаправляти на файл.

Отже, у мене є три запитання:

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

Відповіді:


80

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) та конкретно область Binary). Тому вам слід віддавати перевагу використанню цих команд (можливо, з увімкненими деякими додатковими параметрами) у своїх сценаріях, оскільки вони максимально зберігають зворотну сумісність.


Як безпечно і без помилок використовувати такі команди в скриптах?

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


Чи є спосіб лише і лише перенаправляти STDOUT влучного шоу до файлу?

Ви зробили це правильно вже: >fileабо 1>fileперенаправляєте stdout, 2>fileперенаправляєте stderr і &>fileперенаправляєте обидва на file.

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