You are not logged in.
I'm working on a script to automatically backup my switch configurations via scp (keys are not an option here) so I need to use 'expect'. It appears expect is stealing the stdin data from my loop though.
Here's sample code that demonstrates the issue, note that 'expect' has the debug flag:
#!/bin/bash
set -e
set -u
cat test.conf | while read name addr pw ; do
expect -dc "
set timeout 30
spawn scp admin@$addr:/cfg/startup-config ${name}_startup-config
expect \"password: \"
send \"$pw\r\"
interact
"
doneAnd test.conf looks like this:
line1 address1 password1
line2 address2 password2
line3 address3 password3
line4 address4 password4
line5 address5 password5Now when I run the script, after expect connects to the host and sends the password, it then 'steals' the rest of the data from the `while read` loop on the "spawn id" line of the debug output (eg, line2, address2 and so on) so my loop never gets to it's second (or third, forth etc) iteration:
expect version 5.45
spawn scp admin@address1:/cfg/startup-config line1_startup-config
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {14182}
expect: does "" (spawn_id exp6) match glob pattern "password: "? no
admin@address1's password:
expect: does "admin@address1's password: " (spawn_id exp6) match glob pattern "password: "? yes
expect: set expect_out(0,string) "password: "
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) "admin@address1's password: "
send: sending "password1\r" to { exp6 }
spawn id exp0 sent <line2 address2 password2\nline3 address3 password3\n#line4 address4 password4\nline5 address5 password5\n>
interact: received eof from spawn_id exp0
argv[0] = expect argv[1] = -dc argv[2] =
set timeout 30
spawn scp admin@address1:/cfg/startup-config line1_startup-config
expect "password: "
send "password1\r"
interact
set argc 0
set argv0 "expect"
set argv ""Any idea how I can stop 'expect' stealing my stdin? ![]()
Last edited by fukawi2 (2013-09-20 03:38:07)
Are you familiar with our Forum Rules, and How To Ask Questions The Smart Way?
BlueHackers // fscanary // resticctl
Offline
Ah-ha! Changing 'interact' to 'expect eof' in the expect commands makes this work as expected (no pun intended) ![]()
Are you familiar with our Forum Rules, and How To Ask Questions The Smart Way?
BlueHackers // fscanary // resticctl
Offline