Стандартные потоки в *nix shell
Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
С каждым процессом, выполняемом в интерпретаторе 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>платочек