2016-05-12 16 views
-1

Ich mache die SFTP mit einem Bash-Skript, das Skript läuft und es startet den SFTP-Prozess und vervollständigt es auch, aber es kopiert nicht die vollständigen Daten. (Wie meine Datengröße ist ca. 600 MB es copyies nur 800 KB und wird beendet. die gleiche funktioniert prima, wenn sie manuell tun.sftp funktioniert nicht mit expect

Below mein Skript Inhalt ist

#!/bin/bash 
HOST=x.x.x.x 
PORT=22 
USER=abc 
PASSWORD=password 
SOURCE_FILE=/nobackup/file.gz 
TARGET_DIR=/home 

/usr/bin/expect<<! 

spawn /usr/bin/sftp -o Port=$PORT [email protected]$HOST 
expect "password:" 
send "$PASSWORD\r" 
expect "sftp>" 
send "get $SOURCE_FILE $TARGET_DIR\r" 
expect "sftp>" 
send "bye\r" 
! 

Bitte helfen.

+0

Dies ist eine 'expect' Frage, keine' bash' Frage. Expect ist eine TCL-basierte Sprache, die nicht in der POSIX sh-Familie enthalten ist. –

+0

Außerdem ist das Überschreiben von 'USER' eine schlechte Form - auf vielen (aber nicht allen) Systemen werden Sie feststellen, dass es bereits einen Wert hat, den aktuellen Benutzernamen. Teil des Ansatzes, Kleinbuchstaben für Ihre eigenen Variablen zu verwenden (wie im entsprechenden POSIX-Standard unter http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html empfohlen - siehe vierten Absatz, Einhalten Beachten Sie, dass Shell- und Umgebungsvariablen einen Namespace teilen) Systemvariablen nicht versehentlich überschreiben. –

Antwort

1

einen Batch-Modus Meine Implementierung von sFTP ermöglicht, warum brauchst du das expect-script?

. 
. 
echo "get $SOURCE_FILE $TARGET_DIR" | sftp -b - -o Port=$PORT [email protected]$HOST 
+0

Wenn installiert 'lftp' könnte gut und wahrscheinlich vorzuziehen - aber nicht auf meinem System installiert. Vielleicht kann das OP es auch nicht installieren? –

0

Betrachten lftp, die ausdrücklich als skript eingebaut ist (und unterstützt unter sehr vielen Protokollen, SFTP):

user=abc 
password=password 
host=x.x.x.x 
port=22 
source_file=/nobackup/file.gz 
target_dir=/home 

printf -v cmd 'open %q; get -o %q %q' \ 
    "sftp://$user:[email protected]$host:$port/" \ 
    "${target_dir}/${source_file##*/}" \ 
    "$source_file" 

lftp -c "$cmd" 

Die printf erzeugt eine Zeichenfolge verwandt mit dem folgenden:

... was ein gültiges Lftp-Skript ist.

+0

Es gibt den Fehler: Get: Access fehlgeschlagen: Keine solche Datei (/home/file.gz) – NiteshM

+0

Und tut, was Sie ersetzen anstelle der '/ home'-Verzeichnis tatsächlich existieren? –

+0

/iiidb/software – NiteshM