Перенаправление ввода-выводаПеренаправление ввода-вывода — возможность командной оболочки ряда операционных систем перенаправлять стандартные потоки в определённое пользователем место, например, в файл. Характерна для Unix-подобных операционных систем, но в разной степени реализована и в операционных системах других семейств. Перенаправление стандартных потоков ввода выводаПеренаправление обычно осуществляется вставкой специального символа > между командами. КонвейерыКонвейеры — это возможность нескольких программ работать совместно, когда выход одной программы непосредственно идет на вход другой без использования промежуточных временных файлов. Синтаксис: команда1 | команда2, выполняет команду1 используя её поток вывода как поток ввода при выполнении команды2, что равносильно использованию двух перенаправлений и временного файла:
Хороший пример командных конвейеров — это объединение echo с другой командой для получения интерактивности в неинтерактивных средах, к примеру:
Здесь запускается ftp-клиент, который подключается к локальному узлу (localhost). На запрос программы водит первую строку ИмяПользователя, затем на следующий запрос ввода считывает строку Пароль. Строки в команде echo разделены через \n. Перенаправление из стандартных файловых дескрипторовВ командной оболочке Unix, произошедшей из Bourne shell, предыдущие два действия можно усовершенствовать, указав номер (файловый дескриптор) непосредственно перед символом перенаправления. Этот номер указывает, какой именно поток используется для перенаправления. В Unix существуют следующие стандартные потоки ввода-вывода:
К примеру: команда1 2> файл1 выполняет команду1, направляя стандартный поток ошибок в файл1. В командных оболочках, произошедших от C Shell, по правилам синтаксиса для указания потока, в который осуществляется перенаправление, нужно добавлять символ & после символа перенаправления. Часто стандартный поток ошибок объединяют со стандартным потоком вывода, чтобы можно было обрабатывать ошибки и обычные результаты работы программы вместе. К примеру:
попытается найти все файлы с именем .profile. Если выполнять эту команду без перенаправлений, она будет направлять результаты поиска в stdout, а сообщения об ошибках (к примеру, о недостаточности прав доступа при попытке поиска в защищённых каталогах) в stderr. По умолчанию эти роли выполняет консоль. Если стандартный поток вывода направлен в файл results.txt, то ошибки по-прежнему будут направляться в консоль. Чтобы и ошибки, и результаты поиска направлялись в файл results.txt, стандартные потоки ошибок и вывода были объединены с использованием 2>&1. Написание 2>&1 перед > не будет работать, так как когда интерпретатор прочитает 2>&1, он ещё не знает, куда перенаправлен стандартный поток вывода, поэтому потоки ошибок и вывода не будут объединены. Если объединённый результат нужно направить на вход другой программы посредством конвейера, тогда последовательность 2>&1 должна стоять перед знаком конвейера |. К примеру:
Упрощённая форма записи команды: команда > файл 2>&1 выглядит так: команда &> файл или команда >& файл Цепочка конвейеровКоманды перенаправления и конвейеризации могут быть объединены в цепочки для получения более сложных команд, к примеру:
получает список содержимого текущего каталога, который фильтруется, оставляя только строки содержащие '.sh', затем этот отфильтрованный список лексически сортируется и окончательный результат помещается в файл shlist. Конструкции подобного типа часто встречаются в сценариях командной оболочки. Перенаправление в несколько выводовСтандартная команда tee может перенаправить вывод команды в несколько мест одновременно. Пример:
направляет стандартный вывод команды ls -lrt (список файлов) как в консоль так и в файл1. Перенаправление с добавлениемВ командной оболочке Bash можно осуществить перенаправление в файл с добавлением в конец. При этом информация, хранящаяся в файле, не будет удалена, а вся новая информация будет добавлена в конец этого файла. Синтаксис: команда1 >> файл1 Встроенный документНекоторые оболочки, и даже прикладные языки высокого уровня (PHP, Perl) допускают синтаксис встроенных документов (см. Heredoc-синтаксис), позволяющий направлять входной поток из самого файла программы, например, на стандартный поток вывода:
Или в файл с добавлением в конец:
Завершающая сигнатура окончания встроенного документа EOF (можно использовать произвольное значение, но часто используется именно EOF — соответственно смыслу) должна начинаться с начала строки. Ссылки
|
Portal di Ensiklopedia Dunia