Выполнение:
my_machine~/opt/ams/data/ep/success$ expect -c "spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml; expect { '*password:*' { send 'ad'\r\n }}"
Кажется, не работает, поскольку меня все еще просят относительно пароля.
spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml
adaptive@10.10.12.17's password:
Если я выполняю его как ascript, это работает хорошо.
my_machine~/opt/ams/data/ep/success$ ./try.sh
spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml
adaptive@10.10.12.17's password:
xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml 100% 13MB 13.2MB/s 00:01
my_machine~/opt/ams/data/ep/success$ cat try.sh
#!/bin/bash
expect -c "
spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml
expect {
"*password:*" { send "ad"\r\n; interact }
eof { exit }
}
exit
"
my_machine~/opt/ams/data/ep/success$
Я хотел бы выполнить это в одной команде строки, а не сценарии. Кто-либо получил какие-либо идеи?
Заранее спасибо
A
Я ответил на свой собственный вопрос ниже
Понятно: Следующий код переносит файл с именем Sean_Lilly.zip из моего ящика в другой без ввода пароля:
expect -c "spawn /usr/bin/scp Sean_Lilly.zip adaptive@10.10.12.17:/opt/ams/epf_3_4/Sean_Lilly.zip; sleep 5; expect -re \"password\"; send \"ad\r\n\"; set timeout -1; expect -re \"100%\";"
Я знаю, что это можно сделать, установив беспарольный доступ по ssh между двумя полями, но я хотел сделать это в одной командной строке, используя ожидать. Спасибо fuzzy lollipop за вдохновение. Обратите внимание: если вы запустите команду expect -d -c "spawn ... вы получите отличную отладку того, что происходит, в том числе, достаточно ли хорошее ваше регулярное выражение
Вам не хватает ;
в первом однострочном примере в конце последней команды. И есть лучший способ подбора пароля по образцу.
попробуйте следующее:
expect -c "spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml adaptive@10.10.12.17:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml; expect -re \".*password.*\"; send 'ad\r\n';"