【问题标题】:sftp via bash script in a cronjob: 'get' and 'rm' commands not found?sftp 通过 cronjob 中的 bash 脚本:找不到“get”和“rm”命令?
【发布时间】:2019-04-18 16:36:34
【问题描述】:

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

#!/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 一个非常好的命令,我可以通过直接从命令行运行它们来验证这一点,它们可以正常工作。

【问题讨论】:

  • 脚本以#!/usr/bin/expect 开头,所以它应该包含Expect 命令,而不是shell 命令。
  • 对不起,有什么区别?
  • 必须是send "get ..."
  • 它们是完全不同的语言。 Expect 是一种脚本语言,用于使用expectsend 命令控制另一个交互式程序。
  • 非常感谢!很好的解释,下面的代码工作了

标签: linux bash shell sftp expect


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多