Что означает 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
:)