我在ubuntu vagrant vmubuntu host上都为12.10 64bit构建配置脚本,安装以下软件包时:

sudo apt-get -y install php5-xsl graphviz php-pear unison


我得到警告:

dpkg-reconfigure: unable to re-open stdin: No file or directory


曾尝试搜索,但结果可能会引发其他所有错误,并且很容易找到,无法找出抑制上面警告的方法。安装工作正常,但是上面的警告正在导致流浪汉stdout中出现错误行。

任何人都知道可能是什么原因或如何消除警告

#1 楼

通过在任何apt-get调用之前将以下内容放入我的配置脚本中,我得到了错误消息:

export DEBIAN_FRONTEND=noninteractive


这使debconf使用不需要交互的前端完全没有输入,甚至无法尝试访问stdin

评论


这是正确的答案。大多数配置管理应用程序(SaltStack,Puppet等)都将其用于非交互式软件包安装。

–通知者
2015年5月4日19:25

正确答案,我赞成。

–stefgosselin
15年5月31日在17:54

但是,它不适用于dpkg-preconfigure。

–kursus
16-11-19在21:03

export DEBIAN_FRONTEND =非交互式在dpkg-preconfigure阶段对我有用

–雪崩
19年2月22日在11:19

#2 楼

答案是按照以下步骤设置perl:locale

export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
locale-gen en_US.UTF-8
dpkg-reconfigure locales


这解决了问题,但确实给vagrant up设置增加了不必要的时间。

评论


仅此一点对我不起作用。直到我实现@kenorb的70debconf注释掉修订以进行预配置之前,我仍然会收到警告。

–布赖恩
15年8月31日在21:18

我的问题是:忽略这些警告是否可以? @Coombesy

–马可·普林斯(Marco Prins)
2015年9月23日在7:07

@MarcoPrins是的,您可以放心地忽略诸如“ stdin:不是tty”或“ dpkg-preconfigure:无法重新打开stdin:无此类文件或目录”之类的警告。可以找到周围的众多确认之一,例如此处ikusalic.com/blog/2013/10/03/vagrant-intro

–mloskot
15年11月1日在18:22



#3 楼

运行以下命令:

cat /etc/apt/apt.conf.d/70debconf 


以查看是否具有此文件。如果是这样,解决方案是注释掉DPkg这行,以防止在安装之前用debconf预先配置所有软件包。

因此请将以下命令添加到您的配置文件中:

sudo ex +"%s@DPkg@//DPkg" -cwq /etc/apt/apt.conf.d/70debconf
sudo dpkg-reconfigure debconf -f noninteractive -p critical


否则,如果您不关心此文件,只需将其删除:

sudo rm -v /etc/apt/apt.conf.d/70debconf


以下是需要考虑的其他命令,但我认为它们没有做任何有用的事情:

sudo dpkg-preconfigure -f noninteractive -p critical
sudo dpkg --configure -a


评论


这终于在OSX Yosemite Vagrant和Ubuntu 14.04上对我有用。

–布赖恩
15年8月31日在21:13

您可能仍然需要更改Vagrant使用的Shell。

–无牙叛军
2015年9月2日19:23在

弄乱这个文件是唯一对我有用的东西(显然忽略了“ redirect stderr”建议,我认为这是个坏建议)。我选择使用一对预配置步骤之前/之后在文件中定义的命令中临时包括--frontend = noninteractive选项。 sudo sed -i's / \(dpkg-preconfigure \)--apt / \ 1 --frontend = noninteractive --apt /'/etc/apt/apt.conf.d/70debconf和sudo sed -i' s / --frontend = noninteractive //'/etc/apt/apt.conf.d/70debconf之后。

– phils
19年7月3日,11:57

#4 楼

Bash重定向对stdout和stderr正常工作。

要重定向错误流,请使用以下命令:

sudo apt-get -y install php5-xsl graphviz php-pear unison 2> /dev/null


要同时重定向两个stdout(消息)不是错误/警告)和stderr都使用,请使用:

sudo apt-get -y install php5-xsl graphviz php-pear unison &> /dev/null


这是bash中为此提供的快捷方式:

sudo apt-get -y install php5-xsl graphviz php-pear unison > /dev/null 2>&1


或:

sudo apt-get -y install php5-xsl graphviz php-pear unison 1> /dev/null 2>&1


下面,我们可以清楚地看到文件描述符1是stdout,2 stderr,3 stdin。

$ ls -l /dev/std*
lrwxrwxrwx 1 root root 15 Apr 18 19:03 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Apr 18 19:03 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Apr 18 19:03 /dev/stdout -> /proc/self/fd/1


所以对于您想说的事情,您只需要我给出的第一个命令即可。

评论


我希望能够从apt-get中回显普通的stdout。但是您可能会让我走上正轨...我将尝试仅将stderr发送到位桶-干杯编辑:我们俩都在同一时间评论了-干杯(再次)

–Daithí
13年4月19日在1:34



我编辑了帖子。请参阅最后一行。

– BullShark
13年4月19日在1:45