Я пытаюсь создать сценарий оболочки для автоматизации установки нескольких пакетов на сервер Ubuntu 10.04, и у меня проблемы с proftpd-basic.
Я использую командную строку
apt-get -qy install proftpd-basic >/tmp/install.log
Для большинства пакетов этот подход будет работать нормально, однако proftpd-basic, похоже, требует некоторого взаимодействия (он спрашивает, выполнять ли установку inetd или автономную).
Могу ли я каким-то образом предварительно выбрать эту опцию в командной строке, так как я не хочу, чтобы этот вопрос беспокоил пользователя? - Для информации, если это важно, я хочу выбрать вариант «автономный».
Редактировать:
Интерактивная часть процесса не просто требует простых ответов типа «да / нет», она требует, чтобы я использовал клавиши со стрелками для перехода к нужному мне параметру, требуя, чтобы я нажимал клавишу ввода, чтобы сделать выбор. Это может иметь какое-то отношение к решению этой проблемы.
Вы можете предварительно задать ответы, чтобы debconf увидел, что вы уже ответили на вопрос, и не стал задавать его снова.
Вам понадобятся инструменты из debconf-utils
пакет:
sudo apt-get install debconf-utils
Установите свою программу и один раз ответьте на вопросы вручную. Затем вы можете спросить debconf, что он хранит в своей базе данных:
debconf-get-selections | grep proftpd-basic
Эта информация может быть введена в debconf-set-selections
(либо по конвейеру, либо при чтении из файла).
Ответ Warner более кроссплатформенный (debconf - это технология, основанная только на Debian и производных), но не всегда работает между версиями, если вопросы меняются; или в случае, если у вас есть вопросы по debconf, которые задаются, только если у вас установлены другие пакеты.
Для подобных вещей существует множество различных решений. Я предпочитаю сценарии оболочки, другие могут предпочесть другие методы.
Для взаимодействия с вещами, требующими ввода и не имеющими флагов для указания ответа, вы можете перенаправить ввод. Я бы прочитал apt-get справочная страница прежде чем применять этот подход, поскольку он может иметь встроенную поддержку того, что вы пытаетесь указать. Например:
apt-get -qy install proftpd-basic <<**
RESPONSES GO HERE
**
Вы также можете использовать что-то вроде ожидать. Некоторые клиенты не всегда обрабатывают перенаправление ввода без дополнительных усилий.
Для ведения журнала вы можете использовать тройник и перенаправить STDERR и STDOUT при запуске основного скрипта. Пример:
bash -x script.sh 2>&1 | tee script.log
Мне часто нравится запускать bash с set -x
также. Для сценариев сборки я предпочитаю подробность более чистому выводу.