Alex的解决方案确实可以消除错误,并且他几乎可以解决问题,但是它不允许您回答任何问题(当您预先填写答案并从脚本运行时很好,但是在尝试新软件包时确实很烦人) )。核心问题是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描述的东西,但dumb除外)。
ssh -t <remote_srv> "TERM=$TERM DEBIAN_FRONTEND=dialog apt-get autoremove"
要么
ssh -t <remote_srv> "apt-get autoremove"
readline前端的要求不那么严格,可以与哑终端一起使用,但需要一点钱。
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"