Перенаправление вывода apt-get

Таким образом, есть некоторые выходные данные из apt-get, которые я не могу перенаправить куда-либо еще. Вот пример того, что я вижу:

sudo apt-get -qq -y --force-yes install cowsay 2>&1 > /tmp/tmp.txt

Это пример команды, которую я запускаю 16.04. Я включил здесь --force-yes, чтобы смоделировать подходящее предупреждение для будущего использования. теперь я ожидаю, что эта команда перенаправит все на /tmp/tmp.txt; и большая часть кода делает это. Однако, когда я запускаю его, я получаю следующее:

$ sudo apt-get -qq -y --force-yes remove cowsay 2>&1 > /tmp/tmp.txt
W: --force-yes is deprecated, use one of the options starting with --allow instead.

Как получить предупреждения о перенаправлении и на мой файл?

2
задан 27 May 2016 в 21:41

1 ответ

У Вас есть потоковая команда перенаправления в неправильном месте. Перенаправления анализируются справа налево, поэтому необходимо сначала записать > /tmp/tmp.txt и затем 2>&1. Поскольку Вы записали это, это сначала перенаправляет STDOUT в файл и впоследствии перенаправляет STDERR к STDOUT.

Это - корректная команда:

sudo apt-get -qq -y --force-yes remove cowsay > /tmp/tmp.txt 2>&1

Но существует более простая альтернатива! Необходимо не обязательно перенаправить STDERR в STDOUT для получения обоих записанных в файл, существует также оператор, который непосредственно перенаправляет и STDOUT и STDERR в файл: &>

sudo apt-get -qq -y --force-yes remove cowsay &> /tmp/tmp.txt

Объяснение и дальнейшая информация:

  • > filename перенаправления STDOUT (поток 1) к filename
  • 2> filename перенаправления STDERR (поток 2) к filename
  • &> filename перенаправления STDOUT и STDERR к filename

Так же, если Вы хотите передать вывод по каналу к второй команде:

  • | перенаправления STDOUT (поток 1) к STDIN второй команды
  • 2| filename перенаправления STDERR (поток 2) к STDIN второй команды
  • &| filename перенаправления STDOUT и STDERR к STDIN второй команды
7
ответ дан 28 May 2016 в 07:41

Другие вопросы по тегам:

Похожие вопросы: