Я создаю сценарий подготовки для 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 stdout.
Кто-нибудь знает, что может быть причиной или как подавить предупреждение
Я получил сообщение об ошибке, которое нужно удалить, добавив следующее в мой сценарий подготовки перед любым apt-get
звонки:
export DEBIAN_FRONTEND=noninteractive
Это делает debconf
использовать интерфейс, который вообще не ожидает интерактивного ввода, не позволяя ему даже пытаться получить доступ 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
обеспечение.
Выполните эту команду:
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
Перенаправление 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 - это стандартный вывод, 2 - стандартный поток, 3 - стандартный ввод.
$ 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
Итак, для того, что вы хотите сделать, вам понадобится только самая первая команда, которую я дал.