В Unix-подобных системах ввод-вывод реализован через потоки: stdin
, stdout
, stderr
1.
Пример работы с этими потоками из 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
-
Подробнее об этих и других потоках на стр. Таблица файловых дескрипторов. ↩