2013-11-14 8 views
10

mit Ich erhalte den folgenden Fehler, der in der letzten Zeile meines Codes ist das Markieren (was leer ist):Fehler bei der ein Bash hier-doc „unerwartetes Ende der Datei“

syntax error: unexpected end of file 

Ich verstehe nicht, warum es das sagt. Ich versuche einfach ein here-doc für eine SSH-Verbindung zu verwenden:

#!/bin/sh 

connectToServer() { 
    ssh -t [email protected]$1 <<- ENDSSH 
     echo "Connected to server!" 
    ENDSSH 
} 

connectToServer $1 

Was ist mit diesem Code falsch?

EDIT

Dank denen, die mich dies zu beheben geholfen. Es gab ein paar Dinge, die mit meinem Drehbuch nicht in Ordnung waren. Ich benutzte Leerzeichen in der Zeile:

echo "Connected to server" 

anstelle von Tab-Zeichen. Ich habe auch Leerzeichen vor dem abschließenden ENDSSH eingefügt, der den EOF verursacht hat. Diese Änderungen waren ein Teil meines Problems, aber die letzte Sache, die es löste, war das Entfernen eines zusätzlichen Leerzeichen, das nach meinem Schließen ENDSSH erschien.

Antwort

10

Problem ist Leerzeichen vor dem Schließen ENDSSH. Entfernen Sie alle führenden Leerzeichen vor ENDSSH.

+0

Ich habe es gerade versucht und der Fehler ist der gleiche. : -/ –

+0

Ich reproduzierte denselben Fehler, indem ich Leerzeichen vor dem Schließen von 'ENDSSH' platzierte. Es ging weg, als ich alle führenden Leerzeichen entfernte. – anubhava

+1

Ich piped mein Skript zu "hexdump -C" und stellte fest, dass es kein führendes Leerzeichen oder irgendwelche Zeichen vor "ENDSSH" war es ein "0a" oder Newline-Zeichen nach "ENDSSH". Ich habe das entfernt und jetzt funktioniert es. Danke, dass Sie mir geholfen haben, das zu finden! –

7

Der ENDSSH Marker hat am linken Rand sein:

connectToServer() { 
    ssh -t [email protected]$1 << ENDSSH 
     echo "Connected to server!" 
ENDSSH 
} 

Wenn <<- ENDSSH verwenden Sie den Marker einrücken kann, muss aber mit Tab Zeichen eingerückt werden, keine Leerzeichen.

+0

Ich habe es gerade versucht und auf meiner Zeile, wo ich' habe echo "Mit Server verbunden!" Ich habe alle Leerzeichen entfernt und Tabs verwendet. Ich entfernte auch die Leerzeichen von der schließenden 'ENDSSH' und ich habe immer noch die gleiche Fehlermeldung. –

1

Bei Verwendung des Operators <<- werden nur die führenden Registerkarten aus dem hier angezeigten Dokument und der Zeile mit dem Marker entfernt. Sie scheinen die schließende Markierung mit Leerzeichen einzurücken, so dass die Zeile als Teil des hier vorliegenden Dokuments erscheint. Da das hier vorliegende Dokument niemals geschlossen wird, erreichen Sie das Ende der Datei, während Sie es analysieren.

+2

Ist das nicht das gleiche wie was anubhava und ich antworteten? – Barmar

+0

Es war nicht als ich anfing zu tippen. (Ich glaube, ich habe Ihren Kommentar im letzten Satz Ihrer Antwort verpasst). – chepner

Verwandte Themen