heredoc

Переадресация стандартного потока ввода. "Документ здесь"

Bash-heredoc-tutorial

Перенаправление на встроенный документ


>, &>, >&, >>, < Перенаправление ввода/вывода

В любой unix системе, по умолчанию открыто три файла

stdin ( стандартный поток ввода - клавиатура )

stdout ( стандартный потов вывода - экран )

stderr ( стандартный поток вывода ошибок )

дескрипторы 0,1 и 2, соответственно.

Операторы перенаправления позволяют передать вывод из файла, сценария, команды или блока команд на ввод другого файла, сценария, команды. Например:

# ./test.sh > outfile # перенаправление вывода сценария stdout в файл outfile

# command &> outfile # перенаправление выводов stdout и stderr команды в файл outfile

# command >&2 # перенаправление вывода stdout команды в поток stderr

# command > outfile 2>&1 # перенаправление выводов stdout(1) и stderr(2) команды в файл outfile

# ./test.sh >> outfile # перенаправление вывода сценария stdout в файл, в режиме добавления в конец файла

# &>outfile # перенаправление stdout(1) и stderr(2) в файл "outfile ".

Подстановка процесса, передает вывод одного процесса на ввод другого: (command)> <(command) . Между символами <, > и круглой скобкой не должно быть пробела, кроме того символы < и > используются в операциях сравнения символов и целых чисел.

Символ & предваряет номер дескриптора; например, 2>&1 — перенаправление дескриптора 2 (stderr) в дескриптор 1 (stdout). Символ & после символа (>) - тут нужен для того, чтобы пояснить bash, что вы имеете в виду не файл с именем 1, а именно файл с дескриптором 1 символ "больше, чем (>)" не должен быть отделен пробелами от номера дескриптора файла. Если он будет отделен, мы снова укажем на вывод в файл. Во время перенаправления стандартного потока вывода ошибок следует указывать дескриптор файла (2). Для потоков ввода (Ø) и вывода (1) делать это не обязательно.[2>/dev/null] command 2>&1 | less способ изучить процесс процесс порождающий много ошибок

heredoc

Вобщем и целом блок кода или текста, который может быть перенаправлен в командный сценарий или интерактивную программу, называется HereDoc-документ здесь, то есть один из видов перенаправления позволяющий передать интерактивной команде или программе, список команд.

Различные типы языков сценариев, такие как bash, sh, csh, ksh и т. Д., могут принимать текстовый ввод напрямую, используя heredoc, без использования какого-либо текстового файла, но когда требуется меньше текстовых данных для ввода, тогда использование кода и данных в одном файле - лучший вариант, и это можно легко сделать, используя heredoc например в скрипте.

Выглядит это как: команда << слово-разделитель

Встречая в командной строке оператор <<, интерпретатор воспринимает все данные, вводимые с клавиатуры, как входной поток, пока в отдельной строке не будет введено слово-разделитель, указанное в командной строке после оператора. Разделителем может служить любое слово, но стандартно пишут EOF (end of file). Пример:

$ cat <<End-of-message> ----------------------------> line one> line two> line three> ----------------------------> End-of-message----------------------------line oneline twoline three----------------------------Или создав файл сценария;$ cat > testsh#!/bin/bash# testshcat <<End-of-message-------------------------------------line oneline twoline three-------------------------------------End-of-messageexit 0^C
$ chmod +x testsh$ ./testsh-------------------------------------line oneline twoline three-------------------------------------$