2015-07-01 2 views
0

Ниже приведен мой сценарий, содержащий скрипт, связанный с scwn.Почему spawn scp работает неправильно?

spawn scp -r /usr/local/clo/Jenkins.zip [email protected]:/usr/local/clo 
expect "password:" 
send "111111\r" 
expect "*\r" 
expect "\r" 

Но когда я его выполню, он выводит следующий журнал и не может передать файл правильно. **

spawn scp -r /usr/local/clo/Jenkins.zip [email protected]:/usr/local/clo 
[email protected]'s password: 
Jenkins.zip                             0% 0  0.0KB/s --:-- ETA 

**

мне было интересно, как же '0%' произошло? Если я вручную выполнил скрипт scp с консоли, он может отправить файл полностью.

ответ

1

Я подозреваю, что это происходит из-за того, что в результате выданного процесса включаются символы \ r (возврат каретки) при отображении индикатора выполнения, попробуйте добавить expect eof в конец вашего сценария Expect.

Но иметь дело с проблемами тайм-аут, он должен быть лучше, чтобы обнаружить индикатор прогресса, используя exp_continue продолжить выполнение, пока отображается индикатор хода:

spawn scp -r /usr/local/clo/Jenkins.zip [email protected]:/usr/local/clo 
expect "password:" 
send "111111\r" 
expect { 
    "ETA" {exp_continue} 
    "100%" {} 
} 
expect eof 

Вы также можете добавить exp_internal 1 в начале script (он сообщает о внутренней активности команды expect).

+0

спасибо. Кажется, это работает. но когда дело дошло до 84%, наступил тайм-аут. –

+0

Вы правы, для большого файла вы можете увеличить тайм-аут (или отключить его с помощью 'set timeout -1'), но лучше всего обнаружить индикатор выполнения (я обновил свой предыдущий пост). –

Смежные вопросы