sftp无法使用expect工作

时间:2016-05-12 13:01:55

标签: bash sftp expect

我正在使用bash脚本执行sftp,脚本正在运行并启动sftp进程并完成它但不会复制完整数据。(因为我的数据大小约为600 MB,它只复制800KB并且终止。手动操作时工作正常。

以下是我的脚本内容

#!/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 $USER@$HOST
expect "password:"
send "$PASSWORD\r"
expect "sftp>"
send "get $SOURCE_FILE $TARGET_DIR\r"
expect "sftp>"
send "bye\r"
!

请帮忙。

2 个答案:

答案 0 :(得分:1)

我的sftp实现允许批处理模式,为什么需要expect-script?

 .
 .
 echo "get $SOURCE_FILE $TARGET_DIR" | sftp -b - -o Port=$PORT $USER@$HOST

答案 1 :(得分: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:$password@$host:$port/" \
  "${target_dir}/${source_file##*/}" \
  "$source_file"

lftp -c "$cmd"

printf生成类似于以下内容的字符串:

open sftp://abc:password@x.x.x.x:22/; get -o /home/file.gz /nobackup/file.gz

...这是一个有效的lftp脚本。