sftp через bash скрипт в cronjob: команды 'get' и 'rm' не найдены? - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь сделать что-то очень простое: скачать файл с сайта 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"

Что дает? Почему я не могу получить настоящие сообщения об ошибках - я уверен, что получаю и получаю прекрасные команды, и я могу убедиться в этом, запустив их прямо из командной строки, где они работают нормально.

1 Ответ

2 голосов
/ 18 апреля 2019

Вы пишете код TCL в сценарии Expect. Вы не пишете 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
...