Ich automatisiere eine FTP-Sitzung, aber ich möchte stdout und Pipe es in die Datei. Ich habe mit 3 Optionen kommen:Wohin pipe ich bei Verwendung einer Inline-Datei? << EOF ... EOF?
Option 1
ftp -i ftpServer >stdoutFile <<EOF
cd somewhere
get something
EOF
Option 2
ftp -i ftpServer <<EOF >stdoutFile
cd somewhere
get something
EOF
Option 3
ftp -i ftpServer <<EOF
cd somewhere
get something
EOF > stdoutFile
Ich habe anscheinend Syntaxfehler mit allen von ihnen, und keiner von ihnen scheint zu funktionieren.
Ich habe das Gefühl, dass ich das irgendwie schon früher habe, aber ich kann mich nicht erinnern, wie.
bearbeiten
Die Syntaxfehler sind immer noch vorhanden. Es scheint, als ob ich, wenn ich diese Methode mit einem Here-Dokument namens EOF benutze, diesen Delimeter nirgendwo anders im Skript benutzen kann - komisch.
Der genaue Fehler, der erzeugt wird, ist tatsächlich ein Fehler bei der nächsten if-Anweisung Terminierung. Zum Beispiel:
if [ condition ]
then
ftp -i ftpServer >stdoutFile <<EOF
cd somewhere
get something
EOF
fi
if [ something else ]
then
somethingWithaHereDoc <<EOF
foo
bar
EOF
fi
ich Syntax error near unexpected token 'fi'
zeigt auf die Zeile des letzten fi.
Die FTP-Verbindung hängt jetzt. Ich benutze eine ~/.bashrc Datei und es funktioniert in einer anderen Konsole, aber nicht im Skript. Ich hatte versehentlich eine Named Pipe in dem Verzeichnis, wodurch die FTP-Sitzung hängen blieb. Alles ist jetzt gelöst. Vielen Dank!
Der Grund, warum ich das tue, ist, weil ich eine bestimmte Datei von einem FTP-Server herunterladen möchte. Ich liste den Inhalt des Verzeichnisses auf, verlasse die FTP-Sitzung und verarbeite sie in bash und starte dann eine weitere FTP-Sitzung, um die Datei zu erhalten, die ich gewählt habe.
Optionen 1 und 2 sollten beide arbeiten. –
Bitte zeigen Sie die Syntaxfehler, die Sie erhalten, und den Kontext. Option 3 wird sicherlich fehlschlagen, aber die ersten beiden sollten in Ordnung sein. – cdarke
Ihre erste und zweite Option oben sind korrekt, aber Ihr 'EOF' muss das einzige Ding auf der Linie sein: keine führenden Tabulatoren oder Leerzeichen, auch kein hinterherliegender Trödel. Das Problem, das Sie sehen, ist, dass bash den Terminator nicht erkennt. – gilez