Что означает EOFD?

При просмотре SO я иногда вижу EOFD, например:

ftp -vn <$hostname> <<EOFD

Да, я попробовал Google без удачи, на случай, если вам интересно.

4 ответа

Решение

В контексте вопроса, на который вы ссылаетесь, EOFD ничего особенного не значит, это только начало документа bash here.

Из расширенного руководства по написанию сценариев:

Здесь документ является блоком кода специального назначения. Он использует форму перенаправления ввода / вывода для передачи списка команд интерактивной программе или команде, такой как ftp, cat или текстовый редактор ex.

COMMAND <<InputComesFromHERE
...
...
...
InputComesFromHERE

Строка предела очерчивает (кадрирует) список команд. Специальный символ << предшествует предельной строке. Это приводит к перенаправлению вывода командного блока в stdin программы или команды. Это похоже на interactive-program < command-file, где command-file содержит

command #1
command #2
...

here document Эквивалент выглядит так:

interactive-program <<LimitString
command #1
command #2
...
LimitString

Выберите limit string достаточно необычно, что это не произойдет нигде в списке команд и не запутает вопросы.

Таким образом, в этом вопросе автор отправлял команды ftp как будто используя его в интерактивном режиме.

<<EOFD Конструкция - это специальный тип перенаправления для сценариев оболочки (Bourne, bash и я не уверен, что другие), которые говорят оболочке обрабатывать строки следующим образом stdin поток до линии, которая состоит из EOFD виден.

EOFD строка произвольна - любой уникальный токен (или хотя бы один, которого не будет в stdin входной поток).

Попробуйте еще раз с этими условиями поиска: здесь документ

Поскольку эти слова произвольны, зачем кому-то писать EOFD а не обычный EOF?

(И, кстати, существует также традиция использования ! персонаж:

cat <<!
Hello
world
!

)

EOFD может быть полезно, если текст, который вы генерируете с помощью документа here, сам по себе является сценарием оболочки, который сам содержит здесь документы, а эти документы здесь уже используются EOF для разграничения:

cat <<EOFD
#!/bin/sh
# here doc script
cat <<EOF
Hello
World
EOF
EOFD

:)

Другие вопросы по тегам