Я пишу скрипт, который должен прочитать файл, содержащий информацию о пакете, для которого я написал эту строку
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 перенаправлял в файл.
Итак, у меня есть три вопроса:
apt show
в файл? 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
.