dpkg-reconfigure:无法重新打开 stdin:没有文件或目录

dpkg-reconfigure:无法重新打开 stdin:没有文件或目录

我正在为 构建一个配置脚本ubuntu vagrant vmubuntu host12.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

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

相关内容