Решение Алекса действительно подавляет ошибки, и он почти правильно понял причину, но не позволяет вам отвечать на любые вопросы (что хорошо, когда вы уже набрали ответы и запускаете из сценария, но очень раздражает, когда вы пробуете новые пакеты). ). Основной проблемой является взаимодействие между предположениями, сделанными различными внешними интерфейсами ssh и debconf.
Давайте начнем с SSH. ssh предполагает, что когда вы не указываете удаленную команду, вы хотите указать pty на удаленном конце, а вы указываете удаленный, который вы не делаете (это работает замечательно хорошо в 90% случаев, но только не в этом). Это может быть отменено -t
опцией, которая вызывает pty, или -T
опцией, которая не вызывает pty (или соответствующими параметрами файла конфигурации). Кроме того, при использовании pty TERM
переменная окружения копируется (исключения могут касаться проверочной документации для полных данных и официальной формы ввода лотереи). Также следует отметить, что -x
опция отключает пересылку X11 и -X
включает ее.
Debconf сам по себе не имеет требований к интерактивности (по замыслу), но существуют различные интерфейсы, и у каждого свои требования.
Я считаю, что лучше всего выглядит интерфейс gnome (есть также интерфейс ked, с которым я не работал). Для внешнего интерфейса gnome (а также для kde) требуются библиотеки не по умолчанию и сервер X11, поэтому командная строка для принудительного запуска внешнего интерфейса gnome (после установки соответствующих библиотек) будет
ssh -X <remote_srv> "DEBIAN_FRONTEND=gnome apt-get autoremove"
или если вы предпочитаете KDE
ssh -X <remote_srv> "DEBIAN_FRONTEND=kde apt-get autoremove"
Интерфейс диалога (по умолчанию) требует наличия pty и терминала с минимальным уровнем функциональности, указанным в переменной TERM (на практике это все с полным описанием terminfo, кроме тупого).
ssh -t <remote_srv> "TERM=$TERM DEBIAN_FRONTEND=dialog apt-get autoremove"
или же
ssh -t <remote_srv> "apt-get autoremove"
Интерфейс readline имеет менее строгие требования и будет работать с тупыми терминалами, но для него потребуется pty.
ssh -t <remote_srv> "DEBIAN_FRONTEND=readline apt-get autoremove"
Интерфейс редактора зависит от редактора, который будет иметь определенные требования в зависимости от редактора.
ssh -t <remote_srv> "DEBIAN_FRONTEND=editor EDITOR=vi apt-get autoremove"
ssh -X <remote_srv> "DEBIAN_FRONTEND=editor EDITOR=gvim\ -f apt-get autoremove"
У неинтерактивного интерфейса нет требований, но он не задает никаких вопросов (которые могут быть или не быть тем, что вы хотите).
ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"