2013-11-14 6 views
10

ottengo il seguente errore che viene langue sull'ultima riga del mio codice (che è vuoto):errore quando si utilizza un bash qui-doc "fine inaspettata di file"

syntax error: unexpected end of file 

non riesco a capire fuori perché sta dicendo questo. Sto semplicemente cercando di utilizzare un here-doc per una connessione SSH:

#!/bin/sh 

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

connectToServer $1 

Cosa c'è di sbagliato in questo codice?

EDIT

Grazie a quelli di voi che mi hanno aiutato a risolvere questo. C'erano un paio di cose che non andavano nella mia sceneggiatura; Stavo usando gli spazi sulla linea:

echo "Connected to server" 

invece di tabulazione caratteri. Stavo includendo anche gli spazi prima della chiusura ENDSSH che stava causando l'EOF. Questi cambiamenti sono stati una parte del mio problema, ma l'ultima cosa che ha risolto è stata la rimozione di uno spazio aggiuntivo che appariva DOPO la mia chiusura ENDSSH.

risposta

10

Il problema è spazi prima della chiusura ENDSSH. Estrarre tutti gli spazi iniziali prima dello ENDSSH.

+0

Ho appena provato questo e l'errore è lo stesso. : -/ –

+0

Ho riprodotto lo stesso errore inserendo degli spazi prima di chiudere 'ENDSSSH' Va via quando ho spogliato tutti gli spazi iniziali. – anubhava

+1

Ho collegato il mio script a 'hexdump -C' e ho scoperto che non era uno spazio iniziale o alcun carattere prima di' ENDSSH' era un carattere '0a' o di nuova riga dopo' ENDSSH'. L'ho spogliato e ora funziona. Grazie per avermi aiutato a trovarlo! –

7

Il ENDSSH marcatore deve essere al margine sinistro:

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

Quando si utilizza <<- ENDSSH è possibile rientrare il marcatore, ma deve essere rientrato con Tab personaggi, non gli spazi.

+0

Ho appena provato questo e sulla mia linea dove ho' echo "Connesso al server!" Ho rimosso tutti gli spazi e le schede utilizzate. Ho anche rimosso gli spazi dalla chiusura 'ENDSSH' e ho ancora lo stesso messaggio di errore. –

1

Quando si utilizza l'operatore <<-, solo le linguette iniziali vengono rimosse dal documento qui e dalla riga contenente il marcatore. Sembra che si stia rientrando il marker di chiusura con degli spazi, in modo che quella linea appaia come parte del documento qui, e poiché il documento qui non si chiude mai, si raggiunge la fine del file mentre lo si analizza.

+2

Non è la stessa cosa che io e Anubhava abbiamo risposto? – Barmar

+0

Non è stato quando ho iniziato a scrivere. (Penso di aver perso il tuo commento nell'ultima frase della tua risposta, però). – chepner

Problemi correlati