В Unix-подобных системах ввод-вывод реализован через потоки: stdin, stdout, stderr1.

Пример работы с этими потоками из Python

import sys
 
 
print("Enter name: ", end="", file=sys.stderr) # stderr
 
name = input() # stdin
 
print("Hello, " + name) # stdout

Простые перенаправления

Перенаправления (redirections) в shell позволяют изменять места ввода и вывода данных.

Описание
>fВывод в файл f, перезаписывая его.
2>fВывод ошибок в файл f, перезаписывая его.
<fЧтение данных из файла f.
>>fДобавление вывода в конец файла f.
|Передача вывода одной команды в другую.

Например, можно исполнить пример на Python, написанный выше. Предположим, что этот код сохранён в файле io.py.

Сделаем файл с данными для ввода inp с таким содержимым:

OMP

тогда можно сделать, например, такие перенаправления:

python io.py >out <inp 2>err

Результатом такой команды будет:

  • файл out с содержимым Hello, OMP
  • файл err с содержимым Enter name:
  • файл inp не меняется, но использован в качестве ввода;

Пайп | — фундаментальная вещь в Unix, на ней строится очень много вещей.

Например, можно вывести все шеллы, которые используют первые 10 пользователей в системе. Выведем при этом только уникальные шеллы, без повторений и в лексикографическом порядке:

head -n 10 /etc/passwd | cut -d: -f7 | sort -u

В рамках этой вики у | даже есть своя отдельная страница, где есть ещё больше примеров.

Footnotes

  1. Подробнее об этих и других потоках на стр. Таблица файловых дескрипторов.