Мне нужно прописать путь к FTP-файлам с удаленного сервера.Я не могу использовать ключи, поэтому логин должен быть «интерактивным».Я чувствовал, что ожидание - путь.
У меня есть следующий код ожидания в скрипте bash:
expect <<EOD
spawn sftp $sftp_user@$sftp_svr
expect "password:"
send "$sftp_pw\r"
expect "sftp> "
send "mget $getfile_path$getfile_name $savefile_path\r"
expect "sftp> "
send "bye\r"
EOD
Фрагмент работает нормально, когда он получает только один файл.Тем не менее, если мне нужно получить более одного файла, окончательное «ожидание sftp>» никогда не выполняется.Работает:
[ed@svr1 ~]$ ./sftp_expect.sh
spawn sftp user@svr2
user@svr2's password:
Connected to svr2.
sftp> mget /data/user/upload/lastcheck1.txt /home/ed/report_received/
Fetching /data/user/upload/lastcheck1.txt to /home/ed/report_received/lastcheck1.txt
/data/user/upload/lastcheck1.txt 100% 56 26.9KB/s 00:00
sftp>
[ed@svr1 ~]$
Не работает:
[ed@svr1 ~]$ ./sftp_expect.sh
spawn sftp user@svr2
user@svr2's password:
Connected to svr2.
sftp> mget /data/user/upload/lastcheck*.txt /home/ed/report_received/
Fetching /data/user/upload/lastcheck1.txt to /home/ed/report_received/lastcheck1.txt
/data/user/upload/lastcheck1.txt 100% 56 26.5KB/s 00:00
Fetching /data/user/upload/lastcheck2.txt to /home/ed/report_received/lastcheck2.txt
/data/hf_user/upload/lastcheck2.txt 100% 56 19.3KB/s 00:00
Fetching /data/user/upload/lastcheck_svr2.txt to /home/ed/report_received/lastcheck_svr2.txt
/data/user/upload/lastcheck_svr2.txt 100% 56 31.9KB/s 00:00
sftp>
^C
[ed@svr1 ~]$
Сценарий получает файлы, ожидает получает "то, что ожидает", но не продолжает:
expect: does "mget /data/user/upload/lastcheck*.txt /home/ed/report_received/\r\nFetching /data/user/upload/lastcheck1.txt to /home/ed/report_received/lastcheck1.txt\r\n\r/data/user/upload/lastcheck1.txt 0% 0 0.0KB/s --:-- ETA\r/data/user/upload/lastcheck1.txt 100% 56 24.5KB/s 00:00 \r\nFetching /data/user/upload/lastcheck2.txt to /home/ed/report_received/lastcheck2.txt\r\n\r/data/user/upload/lastcheck2.txt 0% 0 0.0KB/s --:-- ETA\r/data/user/upload/lastcheck2.txt 100% 56 38.3KB/s 00:00 \r\nFetching /data/user/upload/lastcheck_svr2.txt to /home/ed/report_received/lastcheck_svr2.txt\r\n\r/data/user/upload/lastcheck_svr2.txt 0% 0 0.0KB/s --:-- ETA" (spawn_id exp6) match glob pattern "sftp> "? no
/data/user/upload/lastcheck_svr2.txt 100% 56 25.7KB/s 00:00
expect: does "mget /data/user/upload/lastcheck*.txt /home/ed/report_received/\r\nFetching /data/user/upload/lastcheck1.txt to /home/ed/report_received/lastcheck1.txt\r\n\r/data/user/upload/lastcheck1.txt 0% 0 0.0KB/s --:-- ETA\r/data/user/upload/lastcheck1.txt 100% 56 24.5KB/s 00:00 \r\nFetching /data/user/upload/lastcheck2.txt to /home/ed/report_received/lastcheck2.txt\r\n\r/data/user/upload/lastcheck2.txt 0% 0 0.0KB/s --:-- ETA\r/data/user/upload/lastcheck2.txt 100% 56 38.3KB/s 00:00 \r\nFetching /data/user/upload/lastcheck_svr2.txt to /home/ed/report_received/lastcheck_svr2.txt\r\n\r/data/user/upload/lastcheck_svr2.txt 0% 0 0.0KB/s --:-- ETA\r/data/user/upload/lastcheck_svr2.txt 100% 56 25.7KB/s 00:00 \r\n" (spawn_id exp6) match glob pattern "sftp> "? no
sftp>
expect: does "mget /data/user/upload/lastcheck*.txt /home/ed/report_received/\r\nFetching /data/user/upload/lastcheck1.txt to /home/ed/report_received/lastcheck1.txt\r\n\r/data/user/upload/lastcheck1.txt 0% 0 0.0KB/s --:-- ETA\r/data/user/upload/lastcheck1.txt 100% 56 24.5KB/s 00:00 \r\nFetching /data/user/upload/lastcheck2.txt to /home/ed/report_received/lastcheck2.txt\r\n\r/data/user/upload/lastcheck2.txt 0% 0 0.0KB/s --:-- ETA\r/data/user/upload/lastcheck2.txt 100% 56 38.3KB/s 00:00 \r\nFetching /data/user/upload/lastcheck_svr2.txt to /home/ed/report_received/lastcheck_svr2.txt\r\n\r/data/user/upload/lastcheck_svr2.txt 0% 0 0.0KB/s --:-- ETA\r/data/user/upload/lastcheck_svr2.txt 100% 56 25.7KB/s 00:00 \r\nsftp> " (spawn_id exp6) match glob pattern "sftp> "? yes
expect: set expect_out(0,string) "sftp> "
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) "mget /data/user/upload/lastcheck*.txt /home/ed/report_received/\r\nFetching /data/user/upload/lastcheck1.txt to /home/ed/report_received/lastcheck1.txt\r\n\r/data/user/upload/lastcheck1.txt 0% 0 0.0KB/s --:-- ETA\r/data/user/upload/lastcheck1.txt 100% 56 24.5KB/s 00:00 \r\nFetching /data/user/upload/lastcheck2.txt to /home/ed/report_received/lastcheck2.txt\r\n\r/data/user/upload/lastcheck2.txt 0% 0 0.0KB/s --:-- ETA\r/data/user/upload/lastcheck2.txt 100% 56 38.3KB/s 00:00 \r\nFetching /data/user/upload/lastcheck_svr2.txt to /home/ed/report_received/lastcheck_svr2.txt\r\n\r/data/user/upload/lastcheck_svr2.txt 0% 0 0.0KB/s --:-- ETA\r/data/user/upload/lastcheck_svr2.txt 100% 56 25.7KB/s 00:00 \r\nsftp> "
send: sending "bye\r" to { exp6 }
^C
[ed@svr2 ~]$
Если у кого-то есть идея, что удерживает ожидаемую фигуру, я был бы очень признателен.
Ред.