Выбор ответа Junior Потоки и пайпы обновлено

stderr и пайп

Вопрос

Команда find / -name "*.conf" | grep nginx засыпает терминал сообщениями Permission denied. Почему grep их не отфильтровал?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Сообщения идут в stderr, а пайп передаёт только stdout. Пайп соединяет только stdout (дескриптор 1).

Варианты ответа

  1. grep по умолчанию пропускает строки, где есть двоеточие
  2. Сообщения идут в stderr, а пайп передаёт только stdoutправильный ответ
  3. find пишет ошибки прямо в /dev/tty, минуя дескрипторы
  4. Пайп пропускает без фильтра строки длиннее 80 символов

Разбор

Пайп соединяет только stdout (дескриптор 1). Ошибки find пишет в stderr, а он по-прежнему смотрит в терминал. Решения: find / -name "*.conf" 2>/dev/null | grep nginx или 2>&1 |, если ошибки тоже нужно фильтровать. В /dev/tty find не пишет, ограничений по длине строки у пайпа нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме