При использовании окна UNIX на ПК или рабочей станции UNIX клавиатура является стандартным средством для ввода команд в оболочке, а терминал — стандартным местом для их вывода. Любые появляющиеся в результате их выполнения ошибки называются стандартными ошибками и обычно отображаются на экране.
На заметку! Для обозначения стандартных мест ввода и вывода в оболочке UNIX принято использовать понятия стандартный ввод, стандартный вывод и стандартная ошибка
Однако при желании в качестве ввода можно также использовать и записанный ранее файл, а также заставлять UNIX отправлять вывод не на экран, а в файл. Такой процесс маршрутизации ввода и вывода через файлы называется перенаправлением ввода и вывода.
Если нужно избавиться от вывода, его можно перенаправить в специальное место под названием /dev/null. В случае указания /dev/null в качестве места вывода все сообщения, выдаваемые во время выполнения программы, просто отбрасываются и не фиксируются нигде в файловой системе. Приведенный ниже пример показывает, как перенаправление вывода файла в /dev/null приводит к исчезновению его содержимого:
$ cat testfile1 $ This is the first line of testfile1 $ cat testfile1 > /dev/null $ cat /dev/null
В этом примере первая команда cat отображает вывод файла testfile1. Однако после перенаправления вывода команды cat в /dev/null, этот вывод исчезает.
На заметку! Кажется, что перенаправление вывода команды cat сводит на нет смысл первого выполнения этой команды, но бывают ситуации, вроде тех, когда выполняется какой-то сценарий и не нужно видеть вывод всех команд.
В таблице ниже вкратце перечислены основные операции перенаправления, поддерживаемые в большинстве версий UNIX.
Операция перенаправления | Описание |
< | Перенаправление стандартного ввода для команды |
> | Перенаправление стандартного вывода в файл |
>> | Дописывание стандартного вывода к файлу |
<< | Дописывание стандартного ввода к файлу |
2 > | Перенаправление стандартных ошибок |
В следующем примере вывод команды date сохраняется в файле file1 и затем из этого файла передается в качестве ввода файлу file2:
$ date > file1 $ file1 < file2
Такого же результата можно добиться и применением поддерживаемой в UNIX команды конвейеризации (|):
$ date | file2
Команда конвейеризации, имеющая вид символа |, указывает, что оболочка должна брать вывод той команды, которая идет перед символом |, и делать ее вводом для той команды, которая идет после него.