我在ubuntu host
上为ubuntu vagrant vm
构buildconfiguration脚本,这两个脚本都是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
试了一下search结果是可以用apt-get来得到其他的错误,不知道如何抑制以上的警告。 安装工作,但上面的警告是造成stream浪汉up stdout中的错误线。
任何人都不知道可能是什么原因或如何抑制警告
在任何apt-get
调用之前,通过将以下内容放入configuration脚本中,我得到了错误消息:
export DEBIAN_FRONTEND=noninteractive
这使得debconf
使用一个根本不需要任何交互式input的前端,防止它甚至不能访问stdin
。
答案是按照以下方式设置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
提供资源。
Bashredirect适用于stdout和stderr。
要redirect错误stream,请使用以下命令:
sudo apt-get -y install php5-xsl graphviz php-pear unison 2> /dev/null
要redirect两个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
所以对于你所说的你想要做的事情,你只需要我给的第一个命令。
运行这个命令:
cat /etc/apt/apt.conf.d/70debconf
看看你是否有这个文件。 如果是这样的话,解决scheme是注释DPkg
行,防止在安装前用debconf
预先configuration所有软件包。
所以将这些命令添加到您的供应文件中:
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