Это очень неловкий способ передачи ожидаемых команд ожидающему интерпретатору. Вместо этого используйте (в кавычках) 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 -d <<'EOF'
и в crontab вы захотите перенаправить stderr в stdout, чтобы получить отладочный вывод
* * * * * /path/to/script.sh 2>&1