Was bedeutet

Was bedeutet

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 wordzur Abgrenzung des Here-Dokuments verwendeten Wörter sind beliebig. Es ist üblich, aber nicht notwendig, ein Wort in Großbuchstaben zu verwenden.

Das -„in“ <<-wordhat 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.

verwandte Informationen