cover.png
Перенаправления Unix pipelines

В любом приложении для Unix-подобных ОС всегда существуют 3 файловых дескриптора:

  • stdin(0)
  • stdout(1)
  • stderr(2)

В скобках указаны их номера.

Конвееры чаще всего используются в shell-скриптах для перенаправления вывода одного приложения на вход другому. Простой пример:

$ ls -la | grep test

Здесь создастся два параллельных процесса, один выведет содержимое текущей директории в stdout, а второй отфильтрует и выведет строки, полученные через stdin. С помощью символа конвеера | происходит перенаправление stdout первого процесса в stdin второго. Таким образом grep на вход получит результат вывода ls.

Следует учитывать, что символ конвеера не перенаправляет stderr. Для его перенаправления нужно воспользоваться следующей конструкцией:

$ <команда> 2>&1

Как уже упоминалось, stderr имеет номер 2. Данной конструкцией мы перенаправляем файловый дескриптор с номером 2 (stderr) в файловый дескриптор под номером 1 (stdout). Для перенаправления в файл можно сразу указать его имя:

$ <команда> > <имя файла>
$ <команда> 2> <имя файла>

И наконец, чтобы одновременно перенаправить stdout и stderr:

$ <команда> > <имя файла> 2>&1

Copyright 2025. All rights reserved.

Привет, друг! Coding Overhead — это мой личный блог о современных технологиях и полезных утилитах.