does the expect script tries to match for everyline on the screen irrespective of the prompts???
After the installer begins.. it displays various lines before the first expect.
But the script tries to match for every line that is displayed before the 1st and timeouts.
1)Why does it tries to match for every lines that is out in the screen?
when it finds the actual matches - the send is passed
2) and also it appends the previous results to next and the expect statement is appended recursively
because of this the expect statements gets varying including the newlines and the order is not maintained.
To avoid matching you previous send commands use set stty_init -echo near the top of your script.
If your prompts can vary order you could try matching them all in one multi choice expect command. In the below example I can match on any one of the three prompts and loop until and eof is found:
Last edited by Chubler_XL; 03-05-2017 at 06:09 PM..
This User Gave Thanks to Chubler_XL For This Post:
Thanks, i did tried setting set stty_init -echo and \r at the end.
But still the previous expects are concatenated recursively.
Issue :1
Actual expect "path"?
But from autoexpect when i tried to look for the actual expect
Changing expect to
expect "Native ignore this if not using solaris OS.no stlport in java.library.path. path? (Y/n)" then only it matches and sends the response.
i tried regex to shorten this as the other expects concatenates huge stmts and timeout occurs.
This is how expect works it will continue building it's buffer until it encounters the string it is looking for:
See here your statement was expect "path? (Y/N)", the input buffer will continue to grow until it finds a match for this, or after a default of 10 seconds it will timeout.
If you are timing out it could be you are trying to match to the wrong prompt; or (what it sounds like in your case) the install script is taking a long time to get to the next prompt in which case you may just need to extend the timeout eg:
when i tried to provide exact request- before the timeout happens it kind of matched.But does it has to be always the "exact" as few expects - they are longer. and even after increasing timeout it doesnt match for a shorten statements
Actually for every next expect the installer does lot of stuffs
for the license expect - only if the full statement it matches and doesnt work for
expect "license (y/n):"
For matching your license prompt I'd be tempted to use a regular expression like:
This is a little complex and need some explanation.
Firstly I usually quote my regular expressions in expect (and tcl) with { and } instead of double quotes (").
This is because regular expressions tend to contain a lot of special characters which would otherwise be evaluated by tcl,
angled brackets suppress any expansion on the strings within them think of them as the same as single quotes in shell scripts.
So the above can be thought of as saying match the regular expression -{10}\r\nlicense-+\(y/n\) :
-{10} = exactly ten hyphen characters, we could have simply used ---------- instead but this is shorter
-+ = one (or more) hyphen characters; plus symbol in a regular expression means repeat the proceeding expression one or more times
\(y/n\) round brackets are special characters to a regular expression characters so we use backslash to quote them. They then simply match regular bracket characters.
I'm fairly new to scripting so this might not be possible.
I am using Expect with Cisco switches and need to capture the string after finding the expect request. For example, when I issue "show version" on a Nexus switch, I'm looking to capture the current firmware version:
#show version
... (0 Replies)
Dear All,
I have a requirement where I have to SFTP or SCP a file in a batch script. Unfortunately, the destination server setup is such that it doesn't allow for shell command line login. So, I am not able to set up SSH keys. My source server is having issues with Expect. So, unable to use... (5 Replies)
I have an expect script called remote that I want to call from inside my expect script called sudoers.push, here is the code that is causing me issues:
set REMOTE "/root/scripts/remote"
...
log_user 1
send_user "Executing remote script as $user...\n"
send_user "Command to execute is: $REMOTE... (1 Reply)
Not able to execute the file in remote host using except utility
I am automating the SFTP keys setp process:
So i created the expect script for controlling the output of shell
below is my main code:
Code:
#!/usr/bin/expect
set fd
set password
close $fd
set df
set app
close $df... (1 Reply)
Hi,
Am very new to expect scripting..
Can You please suggest me how to call an expect script inside another expect script..
I tried with
spawn /usr/bin/ksh
send "expect main.exp\r"
expect $root_prompt
and
spawn /usr/bin/ksh
send "main.exp\r"
expect $root_prompt
Both... (1 Reply)
Hey all. Sometimes I'm tasked to change some router configs for the entire network (over 3,000 Cisco routers). Most of the time its a global config parameter so its done with a loop and an IP list as its the same configuration change for all routers. This is working OK.
However, sometimes an... (3 Replies)
Hi all,
I'm new with expect. I'm developing a quick script to check my sudo access on 100 servers.
So using !/bin/usr/expect doesn't work. So decided to use it as :
expect -c "set timeout -1;\
spawn ssh $IPADDR -l $USERID ;\
match_max 100000;\
expect {
-re... (0 Replies)
This Expect script provides expect with a list of IP addresses to Cisco IPS sensors and commands to configure Cisco IPS sensors. The user, password, IP addresses, prompt regex, etc. have been anonymized. In general this script will log into the sensors and send commands successfully but there are... (1 Reply)
Here is a snippet of code that work for me:
expect "abc" {send_log "abc found" } \
"def" {send_log "def found" } \
"123" {send_log "123 found}
however the following does not and according to the book "Exploring Expect" it should be equivalent:
expect { "abc"... (1 Reply)
Hello to all...this is my first post (so please go easy). :)
I feel pretty solid at expect scripting, but I'm running into an issue that I'm not able to wrap my head around. I wrote a script that is a little advanced for logging into a remote Linux machine and changing text in a file using sed.... (2 Replies)