я хочу запустить эту команду на ubuntu 18.04 из кода node js, поэтому я не могу отвечать на запросы и я следует вызвать его один раз
sudo apt-get install --install-рекомендует linux-generic-hwe-18.04
с помощью следующего трюка я сделал это
printf '\ n' | sudo apt-get install --install-рекомендует linux-generic-hwe-18.04
, но затем я получаю диалоговый вопрос о том, что выбран второй вариант, но мой ответ - первый вариант AKA «установить версию сопровождающего пакета» трюк ниже не работает
┌─────────────────────────────────┤ ├─────────────────────────────────┐
│ A new version of /boot/grub/menu.lst is available, but the version │
│ installed currently has been locally modified. │
│ │
│ What would you like to do about menu.lst? │
│ │
│ install the package maintainer's version │
│ keep the local version currently installed │
│ show the differences between the versions │
│ show a side-by-side difference between the versions │
│ show a 3-way difference between available versions │
│ do a 3-way merge between available versions (experimental) │
│ start a new shell to examine the situation │
│ │
│ │
│ <Ok> │
│ │
└──────────────────────────────────────────────────────────────────────┘
ни одно из нижеперечисленных не работает
printf '\ n1 \ n' | sudo apt-get install --install-рекомендует linux-generic-hwe-18.04 printf '\ n \ n' | sudo apt-get install --install-рекомендует linux-generic-hwe-18.04
также я пробовал много методов, подобных нижеприведенному, но это не сработало
sudo DEBIAN_FRONTEND = noninteractive apt-get -y -o Dpkg :: Options :: = "- force-confdef" -o Dpkg :: Options :: = "- force-confold" dist-upgrade
я часто сталкиваюсь с такими вопросами, например, по вопросам libssl Скажите, пожалуйста, как я могу ответить на такие вопросы? Я хочу ответить на все вопросы, прежде всего, запустив команду
Dpkg на самом деле предлагает метод автоматизации ответов на диалоговые вопросы и очень популярен при предварительном заполнении установки (в основном сервер Ubuntu, хотя и не поддерживается новым установщиком), поскольку такие установщики, как правило, имеют огромное количество меню и опций меню.
Файл debconf (конфигурация Debian), также известный как начальный файл, представляет собой файл, в котором перечислены параметры и вопросы, заданные установщиком ( слово в слово, как есть) и наши ответы на них. Если вопрос отсутствует или на него дается неподдерживаемый ответ, будет выбрано значение по умолчанию (если возможно).
Каждый пакет имеет список настроек, даже если в процессе установки не задавались вопросы и использовались значения по умолчанию. При переустановке пакета и не указании новых конфигураций используются уже известные машине. Примечание: файлы debconf на самом деле не настраивают пакеты, они просто содержат набор вопросов и значений ответов, используемых программой установки.
debconf-get-selections
. debconf-get-selections |grep ''
.debconf-set-selections ''
. debconf-set-selections ''
. Дополнительную информацию см. на страницах руководства: debconf-get-selections(1), debconf-set-selections(1).
Обычно трудно составить правильный полный список выбора, и очень хороший способ — сначала установить пакет, сбросить его выборки в файл, отредактировать соответствующие выборки и установить новые выборки из файла. Вы также можете передать строку или содержимое файла команде set:
echo "some selection" |debconf-set-selections
Вот пример выбора двух пакетов debconf, один для lightdm (диспетчер отображения Ubuntu) и несколько строф from grub selections:
$debconf-get-selections |grep lightdm
lightdm shared/default-x-display-manager select lightdm
lightdm lightdm/daemon_name string /usr/sbin/lightdm
$debconf-get-selections |grep grub-pc
grub-pc grub-pc/chainload_from_menu.list boolean true
grub-pc grub-pc/timeout string 10
grub-pc grub-pc/install_devices multiselect
Как мы видим, синтаксис очень интуитивно понятен: первая часть — это имя пакета, за которым следует '/' и имя вопроса/конфигурации. Послесловие идет способ ответа и ответ.
команда debconf-set-selections
обновила базу данных debconf, хранящуюся в ОС. Можно установить список выбора перед установкой новых пакетов, и они будут использоваться.
Для уже установленных пакетов очистка не требуется. Простое использование dpkg-reconfigure '
после применения новых выборов.
Вы также можете определить уровень debconf, позволяющий отображать и отвечать на них только некоторые вопросы/подсказки подтверждения, или определить, что будут задаваться только критические вопросы:
dpkg-reconfigure -p '<level>' '<my_package_name>'
Доступны следующие уровни: низкий, средний, высокий или критический . Подробнее о debconf здесь: debianwiki/debconf.
Если вы хотите полностью отключить любое диалоговое окно (рекомендуется только в том случае, если ваш выбор точно соответствует вашим намерениям), используйте параметр «Неинтерактивный»: dpkg-reconfigure --frontend Неинтерактивный '<имя_пакета>'
.
Если вы хотите программно отвечать на подсказки интерактивной программы, вы должны использовать expect
. Установите пакет expect
и напишите сценарий, который запускает вашу программу и отвечает на запросы. Общий вид скрипта будет следующим:
#!/usr/bin/expect
spawn <command_to_run>
expect <something_that_should_appear_on_screen>
send <keys_that_should_be_sent_to_program>
expect <something_that_should_appear_on_screen>
send <keys_that_should_be_sent_to_program>
expect <something_that_should_appear_on_screen>
send <keys_that_should_be_sent_to_program>
...
expect <something_that_should_appear_at_the_very_end>
exit
Чтобы правильно использовать expect, требуется некоторая практика, но как только вы к нему привыкнете, это будет чрезвычайно полезный инструмент.