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

sftp via bash script in a cronjob: 'get' and 'rm' commands not found?

我正在尝试做一些真实、非常简单的事情:在设定的时间从 sftp 站点下载文件。但是,我收到像 'command: rm does not exist' 或 'command get does not exist' 这样的错误,这是垃圾,因为这些命令显然存在。

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

什么给了?为什么我不能收到真正的错误消息 - 我确定 get 和 rm 是一个非常好的命令,我可以通过 运行 直接从命令行验证它们,它们工作正常。

您正在 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