我有一个bash脚本,应该定期运行。该脚本应连接到远程SFTP服务器并从那里获取文件。
由于这是SFTP服务器,因此我必须在bash脚本中使用Expect。
当我手动运行脚本时,脚本运行良好,但通过crontab运行时,脚本运行失败。
有问题的功能是MyClass<T extends T_1 or T_2>
请告知...
这是代码:
get_JSON_file()
答案 0 :(得分:3)
期望的interact
仅在 stdin 在tty / pty上但cron作业不在tty / pty上运行时起作用。因此,将interact
替换为expect eof
(或在必要时替换expect -timeout 12345 eof
)。
答案 1 :(得分:1)
将期望命令传递给期望解释器的方式非常尴尬。请改用(引号)heredoc,然后将-f
选项删除为期望值
get_JSON_file(){
/usr/bin/expect <<'EOF'
spawn sftp -P port user@ip
expect "Password:"
send "password\r"
expect "$ "
send "get path/to/file/file.json\r"
send "exit\r"
expect eof
EOF
}
调试Expect脚本的最重要技巧是调用Expect的调试输出。在解决问题时,请使用
expect -d <<'EOF'
在crontab中,您希望将stderr重定向到stdout,以便获得调试输出
* * * * * /path/to/script.sh 2>&1
答案 2 :(得分:0)
要在shell脚本中运行函数,请勿使用括号。
您的代码将变为:
Sub Protect()
Worksheets("Sheet1").Cells.Locked = False
Worksheets("Sheet1").Range("B1:b10").Locked = True
Worksheets("Sheet1").Protect Password:="erty", UserInterfaceOnly:=True
End Sub