Стандартные потоки в *nix shell

Материал из Linux Wiki
Версия от 14:26, 27 октября 2008; Nib952051 (обсуждение | вклад) (Новая: С каждым процессом, выполняемом в интерпретаторе shell, связан целый ряд открытых файлов, идентифицируе...)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигацииПерейти к поиску

С каждым процессом, выполняемом в интерпретаторе shell, связан целый ряд открытых файлов, идентифицируемых по своим дескрипторам. Дескрипторы это целые (неотрицательные) числа. Эти файлы можно посмотреть в /proc/#процесса/fd/.

Самые интересные из этих 12 файлов, пожалуй 0, 1, 2. Это stdin(кому-нибудь напоминает std::cin), stdout и stderror соответственно. Так же к ним можно обращаться как к /dev/stdin, /dev/stdout, /dev/stderror.


Примеры перенаправления потоков
команда > файл перенаправляет стандартный поток вывода в файл. Если надо, то создает файл, иначе старое содержимое теряется
команда >> файл дописывает стандартный поток в конец файла(режим присоединения)
команда m> файл ассоциирует стандартный поток с дескриптором #m с файлом
команда < файл получает данные из файла
команда << разделитель получает данные из стандартного потока ввода, пока не встретит разделитель
команда < файл0 > файл1 команда получает входные данные из файл0 и отправляет выходные в файл1
> файл создание файла

Пример:

$ cat >> файл << EOF
> построчное
> содержимое файла
> EOF

Пример:

промолчит, если нет `ddd'
$ ddd 2>/dev/null
а тут наоборот, проругается = `ddd: команда не найдена'
$ddd 2>/dev/stdout
проругается в платочек
$ddd 2>платочек