2012-04-04 14 views
4

Während SO Surfen I:Was bedeutet EOFD? manchmal EOFD siehe zum Beispiel

ftp -vn <$hostname> <<EOFD 

Ja Ich habe versucht, Google ohne Glück, nur für den Fall, dass Sie sich fragen.

+0

weiß nicht über 'D'. Aber EOF = Ende der Datei – hjpotter92

+2

End of Data, vielleicht? Der Bezeichner, der in einem [hier Dokument] (http://en.wikipedia.org/wiki/Here_Dokument) verwendet wird, kann beliebig sein. –

+0

als @blahdiblah wies darauf hin, dass ich [diese Frage] referenzierte (http://stackoverflow.com/q/10013151/85950) – jdorfman

Antwort

5

Im Zusammenhang mit the question you reference, EOFD bedeutet nichts besonderes, es ist nur der Beginn einer Bash here document.

Vom Advanced Bash-Scripting Guide:

A hier dokumentieren ist ein Spezial-Codeblock. Es verwendet eine Art von E/A-Umleitung, um eine Befehlsliste an ein interaktives Programm oder einen Befehl wie ftp, cat oder den ex-Texteditor zu leiten.

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

A Grenz Zeichenfolge abgrenzt (Frames) der Befehlsliste. Das Sonderzeichen << steht vor der Begrenzungszeichenfolge. Dies hat zur Folge, dass die Ausgabe eines Befehlsblocks in die stdin des Programms oder Befehls umgeleitet wird. Es ist ähnlich wie interactive-program < command-file, wo command-file enthält

command #1 
command #2 
... 

Die here document Äquivalent sieht wie folgt aus:

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

Wählen Sie ein limit string so ungewöhnlich, dass es nicht überall in der Befehlsliste auftreten und Angelegenheiten verwirren.

Also in dieser Frage, der Autor schickte Befehle an ftp, als ob es interaktiv verwenden würde.

+0

Macht Sinn, vielen Dank. – jdorfman

3

Das <<EOFD Konstrukt ist eine spezielle Art eine Umleitung für Shell-Skripten (Bourne, bash und ich bin mir nicht sicher, was die anderen), die die Schale sagen die Linien zu behandeln folgen wie der stdin Stream, bis eine Zeile, die aus EOFD besteht, gesehen wird.

Der String EOFD ist beliebig - ein beliebiges eindeutiges Token (oder mindestens ein Token, das nicht im stdin Eingabestrom enthalten ist).

1

Da diese Wörter willkürlich sind, warum würde jemand schreiben EOFD anstatt der üblichen EOF?

(Und, nebenbei bemerkt, ist es auch die Tradition der Verwendung des ! Charakter:

cat <<! 
Hello 
world 
! 

)

EOFD könnte nützlich sein, wenn der Text, den Sie mit einem hier Dokument sind zu erzeugen ist selbst ein Shell-Skript, das sich hier Dokumente enthält, und die hier bereits Dokumente EOF zur Begrenzung verwenden:

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

:)

+0

Ich habe die '' '- Tradition (an die ich mich noch erinnere) nicht gesehen. "EOF" und "Ende" (in Groß- und Kleinschreibung) sind ziemlich häufig, und manche Leute verwenden unterschiedliche Endmarkierungen für jedes Here-Dokument in einem Skript, vermutlich um sie leichter zu finden. – torek