![dpkg-reconfigure:无法重新打开 stdin:没有文件或目录](https://linux22.com/image/800968/dpkg-reconfigure%EF%BC%9A%E6%97%A0%E6%B3%95%E9%87%8D%E6%96%B0%E6%89%93%E5%BC%80%20stdin%EF%BC%9A%E6%B2%A1%E6%9C%89%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E5%BD%95.png)
我正在为 构建一个配置脚本ubuntu vagrant vm
,ubuntu 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
尝试搜索,但结果显示 apt-get 可能出现的所有其他错误,无法找到如何抑制上述警告。安装成功,但上述警告导致 vagrant up 标准输出中出现错误行。
有人知道可能是什么原因或如何抑制警告吗
答案1
通过在任何调用之前将以下内容放入我的配置脚本中,我得到了错误消息apt-get
:
export DEBIAN_FRONTEND=noninteractive
这使得debconf
前端根本不需要交互式输入,甚至阻止它尝试访问stdin
。
答案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
配置时间。
答案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
答案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
所以对于你说你想做的事情,你只需要我给出的第一个命令。