93 votos

dpkg-reconfigure: no se puede volver a abrir stdin: Ningún archivo o directorio

Estoy construyendo una secuencia de comandos aprovisionamiento para un ubuntu vagrant vm, en un ubuntu host, ambos 12.10 64bit Cuando la instalación de los siguientes paquetes:

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

Me sale el aviso:

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

han intentado buscar pero los resultados están lanzando cada otro error con apt-get posible, no puede averiguar cómo suprimir la advertencia anterior. La instala trabajo, pero la advertencia anterior está causando el error líneas en el vagrant up stdout.

Alguien alguna idea de lo que podría ser la causa o cómo suprimir la advertencia

114voto

der_gabe Puntos 1

Recibí el mensaje de error desaparece por poner lo siguiente en mi script aprovisionamiento, antes de cualquier apt-get llamadas:

export DEBIAN_FRONTEND=noninteractive

Esto hace que debconf el uso de una interfaz que no espera interactivo de la participación de todos, evitando que incluso intentando acceder, stdin.

25voto

Coombesy Puntos 350

La respuesta fue establecer el perl:locale's: http://www.thomas-krenn.com/en/wiki/Perl_warning_Setting_locale_failed_in_Debian

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

Este sovles el tema, pero no añada tiempo a la vagrant up de aprovisionamiento.

5voto

BullShark Puntos 46

Bash redirección funciona bien para stdout y stderr.

Para redirigir el flujo de error, utilice el siguiente:

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

Para redirigir tanto stdout (mensajes que no son errores/advertencias) y stderr tanto, el uso de:

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

Que es un acceso directo disponible en bash para esto:

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

O:

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

A continuación, podemos ver claramente que el descriptor de archivo 1 es 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

Así que para lo que usted está diciendo que usted quiere hacer, usted debe sólo necesitan en el primer comando me dio.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: