Пояснения для новичков про перенаправление потоков ввода-вывода

**Стандартный вывод (STDOUT)** программы (команды) - это все, что она печатает, за исключением сообщений об ошибках и предупреждений. 
В командной строке: ```julia -e'println("ok")'

или в REPL: println("ok") напечатает текст "ok" на стандартный вывод.

Стандартный вывод ошибок (STDERR) - это второй поток, по соглашению предназначенный для ошибок и предупреждений. Стандартный ввод (STDIN) - это то, откуда вызываемая программа может читать данные.

Командные оболочки (также называемые "shell") операционных систем, как правило, позволяют использовать команды перенаправления стандартных потоков. В этой книге используются примеры, работающие в оболочке bash unix-подобных систем.

Рассмотрим команду перенаправления >>. Составная команда julia -e'println("ok")' >> aa.txt заставит julia выполнить код, заключенный между одинарными кавычками опции -e println("ok"). Функция julia напечатает строку "ok" в стандартный вывод (называемый STDOUT), а командная оболочка bash откроет файл aa.txt для дозаписи, запишет в него пойманную строку "ok" и закроет файл, т.е перенаправит стандартный вывод программы julia в файл aa.txt, создав его, если его еще нет, и дописав "ок" к содержимому файла, даже если если он уже существует и непуст.

Потоки ввода-вывода не следует путать с аргументами командной строки. Аргументы команды (программы) перечисляются через пробел после имени запускаемой команды (программы). В тексте прораммы аргументы будут доступны в виде специального массива значений. Если аргумент сам содержит пробелы, то его заключают в кавычки.

Список самых распространенных команд перенаправления bash:

команда арг1 арг2 > файл - выполнить команду с аргументами командной строки арг1 и арг2 и записать ее стандартный вывод в файл, перезаписав его, если он существует или создав его, если он не существует;

команда арг1 арг2 >> файл - была рассмотрена выше, дописывает файл не стирая его;

команда арг1 арг2 2>файл - выполнить команду с аргументами, перенаправив ее стандартный вывод ошибок в файл с перезаписью; Стандартный вывод по-прежнему связан с терминалом.

команда арг1 арг2 2>>файл - выполнить команду с аргументами, перенаправив ее стандартный вывод ошибок в файл с дозаписью; Стандартный вывод по-прежнему связан с терминалом.

команда арг1 арг2 < файл - выполнить команду, подав на ее стандартный вход содержимое файла файл

команда1 арг1 арг2 | команда2 арг3 арг4 - выполнить команду1 с аргументами и перенаправить ее стандартный вывод на стандартный вход команды2 со своими аргументами арг3 и арг4; Вывод ошибок связан с терминалом.

Со стандартного входа (STDIN) программа читает, когда предполагается ввод пользователя в терминал или перенаправленный поток на вход программы. Попытка чтения с STDIN при отсутствии в нем данных блокирует программу до появления данных в STDIN. Когда данных в STDIN больше нет, операционная система подаст выполняющейся программе один из специальных сигналов. Сигнал будет обработан автоматически и программа выйдет из цикла построчного чтения.

Когда средствами оболочки не используются команды перенаправления, то, по умолчанию, стандартный ввод программы связывается с текущим терминалом. Это значит, программа при попытке чтения с STDIN, остановится до тех пор, пока пользователь не введет текст и не нажмет Enter. Все, что пользователь вводит в окно терминала после запуска программы и до ее окончания, запущенная прорамма может прочитать с потока STDIN.

Пользователь может подать сигнал окончания данных, нажатием комбинации клавиш Ctrl+D.

Без команд перенаправления стандартный поток вывода программы также связывается с терминалом. Все, что она напечатает, будет выведено (через ее STDOUT) в окно терминала. STDERR - тоже печатает в текущий терминал.

Перенаправление ввода-вывода может осуществляться и внутри программы средствами языка программирования.

results matching ""

    No results matching ""