我正在使用bash脚本执行sftp,脚本正在运行,它启动sftp进程并完成它,但它不复制整个数据(因为我的数据大小约为600 MB只copyies 800KB和终止。手动时做同样的工作正常。sftp不能正常工作使用expect
下面是我的脚本内容
#!/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"
!
请帮助。
这是一个'expect'问题,而不是'bash'问题。 Expect是基于TCL的语言,根本不在POSIX sh系列中。 –
另外,在许多(但不是全部)系统上覆盖'USER'是不好的形式 - 你会注意到它已经有一个值,即当前用户名。为自己的变量使用小写字母名称的一部分(正如相关POSIX标准中推荐的http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html - 请参阅第四段,保留在介意shell和环境变量共享一个名称空间)不会错误地覆盖系统变量。 –