
Ich würde gerne wissen, was das Minus (-) und das EOC im folgenden Befehl bedeuten. Ich weiß, dass man in manchen Sprachen wie Perl jede beliebige Zeichenkombination wählen kann (nicht an EOF gebunden), aber ist das hier der Fall? Und das Minus ist mir ein völliges Rätsel. Vielen Dank im Voraus!
ftp -v -n $SERVER >> $LOG_FILE <<-EOC
user $USERNAME $PWD
binary
cd $DIR1
mkdir $dir_lock
get $FILE
bye
EOC
Antwort1
Das ist eine Here-Document-Weiterleitung.
command <<-word
here-document contents
word
Die word
zur Abgrenzung des Here-Dokuments verwendeten Wörter sind beliebig. Es ist üblich, aber nicht notwendig, ein Wort in Großbuchstaben zu verwenden.
Das -
„in“ <<-word
hat zur Folge, dass Tabulatoren am Anfang jeder Zeile im Inhalt des Here-Dokuments entfernt werden.
cat <<-SERVICE_ANNOUNCEMENT
hello
world
SERVICE_ANNOUNCEMENT
Wenn das obige Here-Dokument mit Tabulatoren am Anfang jeder Zeile geschrieben wäre, würde die Ausgabe
hello
world
statt
hello
world
Tabulatoren vor dem Endtrennzeichen werden ebenfalls entfernt <<-
(aber nicht ohne -
):
cat <<-SERVICE_ANNOUNCEMENT
hello
world
SERVICE_ANNOUNCEMENT
(gleiche Ausgabe)
Antwort2
Aus man bash
:
If the redirection operator is <<-, then all leading tab characters are
stripped from input lines and the line containing delimiter. This
allows here-documents within shell scripts to be indented in a natural
fashion.