2016-05-12 2 views
-1

Я выполняю sftp, используя скрипт bash, скрипт запущен и запускает процесс sftp, а также завершает его, но он не копирует полные данные (так как размер моих данных составляет около 600 MB это copyies только 800KB и заканчивается. тот же работает нормально при выполнении вручную.sftp не работает, используя ожидание

Ниже мое содержание сценария

#!/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" 
! 

Пожалуйста, помогите.

+0

Это вопрос 'expect', а не вопрос' bash'. Ожидание - это язык, основанный на TCL, а не в семье POSIX sh. –

+0

Кроме того, перезапись 'USER' - плохая форма - на многих (но не на всех) системах, вы заметите, что она уже имеет значение, текущее имя пользователя. Часть точки использования имен нижнего регистра для ваших собственных переменных (как рекомендовано в соответствующем стандарте POSIX по адресу http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html - см. Четвертый абзац, содержащийся в помните, что переменные оболочки и среды совместно используют пространство имен) не переписывает системные переменные по ошибке. –

ответ

1

Моя реализация SFTP позволяет пакетный режим, почему вам нужен сценарий ожидания?

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

Если установленный 'lftp' может быть точным и, вероятно, предпочтительным, но не установлен в моей системе. Может быть, OP тоже не может его установить? –

0

Рассмотрим lftp, который явно построен, чтобы быть скриптах (и опоры, среди очень многих протоколов 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" 

printf генерирует строку, похожее на следующее:

open sftp://abc:[email protected]:22/; get -o /home/file.gz /nobackup/file.gz 

... который является допустимым сценарием lftp.

+0

его сообщение об ошибке: get: Access failed: Нет такого файла (/home/file.gz) – NiteshM

+0

И действительно ли вы заменяете вместо каталога '/ home'? –

+0

/iiidb/software – NiteshM

Смежные вопросы