Выдержка из статьи:
Вот документ
Здесь документ используется для перенаправления ввода в интерактивный скрипт или программу оболочки.
Мы можем запустить интерактивную программу в сценарии оболочки без действий пользователя, предоставив необходимые данные для интерактивной программы или сценария интерактивной оболочки.
Общая форма документа здесь -
команда <<
разделитель разделитель документа Здесь оболочка интерпретирует оператор <<
как инструкцию для чтения ввода, пока не найдет строку, содержащую указанный разделитель. Все входные строки вплоть до строки, содержащей разделитель, затем подаются на стандартный ввод команды.
Разделитель сообщает оболочке, что документ здесь завершен. Без этого оболочка продолжает читать ввод навсегда. Разделителем должно быть одно слово, которое не содержит пробелов или табуляций.
Ниже приведен ввод команды wc -l
для подсчета общего количества строк:
$wc -l << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
3
$
Здесь вы можете использовать документ для печати нескольких строк, используя ваш скрипт следующим образом:
#!/bin/sh
cat << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
Это даст следующий результат -
Это простая программа поиска хороших (и плохих) ресторанов в Кейптауне.
Следующий скрипт запускает сеанс с текстовым редактором vi
и сохраняет входные данные в файле test.txt.
#!/bin/sh
filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands
Если вы запустите этот скрипт с vim
действующим как vi
, то вы, скорее всего, увидите вывод, подобный следующему:
$ sh test.sh
Vim: Warning: Input is not from a terminal
$
После запуска скрипта вы должны увидеть следующее добавленное в файл test.txt -
$ cat test.txt
This file was created automatically from
a shell script
$