В системе UNIX некоторые команды ожидают ввод только с клавиатуры (стандартный ввод) и большинство команд отображают свой вывод на экране терминала (стандартный вывод). Однако система UNIX позволяет вам перенаправлять ввод и вывод в файлы и программы, т.е. вы можете сказать shell:
Чтобы перенаправить ввод, укажите в командной строке после знака "меньше чем" (<) имя файла:
command < имя_файла<CR>
Чтобы перенаправить вывод, укажите в командной строке после знака "больше чем" (>) имя файла:
command > имя_файла<CR>
Примечание. Если вы перенаправите вывод в уже существующий файл, то вывод вашей команды заменит содержимое существующего файла.
Перед тем, как перенаправить вывод команды в конкретный файл убедитесь, что этот файл не существует. shell не предупреждает, что выполняет перезапись существующего файла.
Чтобы убедиться, что файл с запланированным именем не существует, воспользуйтесь командой ls с аргументом "имя_файла". Если этот файл не существует, то ls выдаст сообщение, что файл не найден в текущем справочнике. Например, проверка существования файлов temp и junk даст следующий результат:
$ ls temp<CR> temp $ ls junk<CR> junk: no such file or directiry $
Это означает, что вы можете назвать свой файл junk, но не можете использовать в качестве имени temp, если не хотите потерять содержимое существующего файла.
Чтобы добавить вывод в существующий файл и не разрушить его, вы можете воспользоваться символом >>:
command >> имя_файла<CR>
В результате выполнения команды вывод будет добавлен в конец существующего файла. Если файл не существует, то он будет создан. Например, рассмотрим как добавить вывод с помощью команды cat. Команда cat печатает содержимое файлов, имена которых являются ее аргументами, в стандартный вывод. Если нет аргументов, то она печатает стандартный ввод в стандартный вывод. Сначала выполните команду cat без перенаправления вывода. Затем содержимое файла trial2 добавляем после последней строки в файл trial1 при выполнении команды cat над файлом rtial2, перенаправив вывод в файл trial1:
$ cat trial1<CR> This is the first line of trial1. Hello. This is the last line of trial1. $ $ cat trial2<CR> This is the beginning of trial2. Hello. This is the end of trial2. $ cat trial2 >> trial1<CR> $ cat trial1<CR> This is the first line of trial1. Hello. This is the last line of trial1. This is the beginning of trial2. Hello. This is the end of trial2. $
Перенаправление вывода очень удобно в том случае, если вы не хотите, чтобы вывод появлялся на экране немедленно, или хотите сохранить его. Рассмотрим две команды: spell и sort.
Команда spell
Команда spell сравнивает каждое слово в файле со своим словарем и печатает список всех потенциальных орфографических ошибок на экране. Если в словаре spell нет какого-либо слова (например, персональное имя), то она также выдает его как орфографическую ошибку. Если вы подадите на ввод spell большой файл, то его обработка займет много времени и список ошибок может быть очень большим. Команда spell распечатывает весь список ошибок сразу. Поэтому лучше всего перенаправить вывод spell в файл. Например, spell осуществляет поиск файла memo и помещает список орфографических ошибок в файл misspell:
$ spell memo > misspell<CR>
Команда sort
Команда sort размещает строки указанного файла в алфавитном или цифровом порядке. Прежде чем перенаправить вывод команды в файл убедитесь, что имя этого файла не существует. Команда sort сначала очищает файл, который будет содержать вывод, затем выполняет сортировку и помещает вывод в пустой файл.
Когда команда запущена в фоновом режиме, то вывод ее печатается на экране терминала. И если вы используете терминал в то же время для выполнения других задач, то вывод фоновой задачи будет прерывать вашу работу. Однако, если перенаправить вывод в файл, то вы сможете спокойно работать.
Предположим, что вы хотите найти все появления слова "test" в файле schedule. Запустите команду grep в фоновом режиме и перенаправьте вывод в файл testfile:
$ grep test schedule > testfile<CR>
Теперь вы можете использовать терминал для других работ и просмотреть файл testfile позднее.
Символ | называется каналом. Канал является мощным средством, которое позволяет вам брать вывод одной команды и использовать его в качестве ввода для другой команды без создания временных файлов. Таким образом построенная последовательность команд называется конвейером. Общий формат конвейера:
command1 | command2 | command3 ... <CR>
Вывод command1 используется как ввод для command2. Вывод command2 используется как ввод для command3.
Чтобы понять насколько эффективен конвейер, рассмотрим 2 способа, которые дают одинаковый результат:
banner happy birhday > message.tmp
mail david < message.tmp
rm message.tmp
Вторым методом это можно сделать быстрее:
banner happy birthday | mail david<CR>
Вывод большинства команд может использоваться как аргумент в командной строке. Для этого команду заключите между знаками "слабое ударение" (`...`) и поместите ее в командной строке в том месте, где вывод будет трактоваться как аргумент.
Например, вы можете подставить вывод конвейера команд date и cut в качестве аргумента в команде banner:
$ banner `date | cut -c12-19`<CR>
Обратите внимание на результат: система печатает banner с текущим временем.
Назад | Содержание | Вперед