4

在浏览 SO 时,我有时会看到 EOFD,例如:

ftp -vn <$hostname> <<EOFD

是的,我试过谷歌但没有运气,以防万一你想知道。

4

4 回答 4

5

在您引用的问题的上下文中,EOFD并不意味着什么特别,它只是 bash here document的开始。

来自高级 Bash 脚本指南

这里的文档是一个特殊用途的代码块。它使用一种 I/O 重定向形式将命令列表提供给交互式程序或命令,例如 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就好像交互式地使用它一样。

于 2012-04-04T22:48:56.880 回答
3

使用这些搜索词再试一次:here document

于 2012-04-04T22:28:52.677 回答
3

<<EOFD构造是一种特殊类型的 shell 脚本(Bourne、bash 和我不确定其他脚本)的重定向,它告诉 shell 将后面的行视为stdin流,直到看到包含的行EOFD

EOFD字符串是任意的 - 任何唯一标记(或至少一个不会出现在stdin输入流中的标记)。

于 2012-04-04T22:32:59.150 回答
1

既然这些词是任意的,为什么有人会写EOFD而不是习惯EOF呢?

(顺便说一句,还有使用这个!字符的传统:

cat <<!
Hello
world
!

)

EOFD如果您使用 here 文档生成的文本本身是一个 shell 脚本,它本身包含 here 文档,并且这些 here 文档已经EOF用于分隔,则可能很有用:

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

:)

于 2012-04-05T01:15:17.033 回答