通过cashjob中的bash脚本进行sftp:找不到'get'和'rm'命令?

时间:2019-04-18 16:36:34

标签: linux bash shell sftp expect

我正在尝试做一个真正简单的事情:在设定的时间从sftp站点下载文件。但是,我收到诸如“命令:rm不存在”或“命令不存在”之类的错误,这是垃圾,因为这些命令显然存在。

#!/usr/bin/expect
#remove current version of file
rm -f /home/user/downloads/data/newdata.zip

spawn sftp user@ftpsite.com
expect "password:"
send "PaSsWoRd\n"
expect "sftp>"
get /mycompany/myproject/data/newdata.zip /home/user/downloads/data
expect "sftp>"
send "exit\n"
interact

(base) root@ubuntu:~# ./shellscript.sh
invalid command name "rm"
    while executing
"rm -f /home/user/downloads/data/newdata.zip"

或不删除

(base) root@ubuntu:~# sudo ./shellscript.sh
spawn sftp user@sftpsite.com
EFT Server Login - %DATE% %TIME% - Please enter valid credentials to continueEnter password: 
Connected to ftpsite.com
sftp> invalid command name "get"
    while executing
"get /mycompany/myproject/data/newdata.zip /home/user/downloads/data"

有什么作用?为什么我不能收到真正的错误消息-我确定获得并rm了一个非常好的命令,并且可以通过直接在命令行运行它们的方式正常运行来验证这一点。

1 个答案:

答案 0 :(得分:2)

您正在用Expect脚本编写TCL代码。您不是在shell脚本中编写Bash。

您必须send要写入sftp工具的命令:

send "get /mycompany/myproject/data/newdata.zip /home/user/downloads/data\n"

然后exec您要非交互式运行的任何命令:

exec rm -f /home/user/downloads/data/newdata.zip