Issues with Expect Script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Issues with Expect Script
# 8  
Old 03-09-2017
Thanks for the detailed explanation and that worked perfectly!!!
i just had to add another escape for "/" between y/n .{\(y\/n\)}.

Before the license prompt, the installer may exit for few validations. Though the below code works, i don't want to put them in while loop as it starts to validate for all expects. Since we knew the order except that it may or may not occur is there a way to read from output buffer and to check ?
Code:
spawn ./Inst.sh
expect "\r\npath? (Y/N) "
send "Y\r"
send "\r\n$DIR1: "
expect "\r\npath? (Y/N) "
send "Y\r"
expect "\r\n\r\nfolder path2 : "
send "$DIR2\r"
while {1)
{
expect 
-exact "no space" {exit 1}
-exact "not latest" {exit 1}
-re {-{10}\r\nlicense-+\(y\/n\) : }
send "Y\r"
-exact "\r\n\r\nfolder path2 : "
send "$DIR2\r"
eof {break}
}

# 9  
Old 03-23-2017
Since the actual install would take around 4-5hrs,is the below while loop is advisable for long running installations?
are there any better way of implementing it , to avoid the loop expects matching for all commands everytime.


Code:
spawn ./Inst.sh
expect "\r\npath? (Y/N) "
send "Y\r"
send "\r\n$DIR1: "
expect "\r\npath? (Y/N) "
send "Y\r"
expect "\r\n\r\nfolder path2 : "
send "$DIR2\r"
while {1)
{
expect 
-exact "no space" {exit 1}
-exact "not latest" {exit 1}
-re {-{10}\r\nlicense-+\(y\/n\) : } send "Y\r"
-exact "\r\n\r\nfolder path2 : "send "$DIR2\r"
eof {break}
}

# 10  
Old 03-23-2017
This approach seems fine expect keeps a fairly limited buffer (2000 characters by default) so it's not like it would be using heaps of memory.

You could also limit break out of the loop based on a certain strings in the input (e.g. === Unpacking Complete ===) and then resume your normal single expect approach something like this:

Code:
...
while {1)
{
   # Lots of output here while unpacking - can take 4-5 hrs !
   expect 
        -exact "no space" {exit 1}
        -exact "not latest" {exit 1}
        -exact "\r\n=== Unpacking Complete===" { break }
}

expect -re {-{10}\r\nlicense-+\(y\/n\) : }
send "Y\r"
-exact "\r\n\r\nfolder path2 : "
send "$DIR2\r"

# 11  
Old 03-24-2017
Thanks for the response.
But the challenge is i get timeout when i try to put the install out of while.
after the license prompt is the actual install starts.and thats where i could find the best break.
Hence now the installation steps tries to match with last expect and it timeouts.
Code:
...
while {1)
{
       expect 
        -exact "no space" {exit 1}
        -exact "not latest" {exit 1}
       - expect -re {-{10}\r\nlicense-+\(y\/n\) {send "Y\r"" ; break }
}
###LOTS OF ACTIONS takes here 4hrs ####
-exact "\r\n\r\nfolder path2 : "
send "$DIR2\r"

Code:
expect: does "----------------------------------------\\r\n----------------
------------------------\r\nBeginning installing of data packs.\r\n\r\nUnzipping FILE1 and installing\r\n+\r\nUnzipping FILE2 and installing\r\n++++\r\nUnzipping FILE3 and installing\r\n++" (spawn_id exp5) match exact string "\r\n\r\nfolder path2:"? no
expect: timed out
send: sending "/XX/XX/XXXX\r"

I can try adding timeout expect- but how to proceed with the install?
# 12  
Old 03-26-2017
I can't see any problem here with increasing the timeout before looking for the path2 prompt eg:

Code:
...
while (1) {
   expect {
       -exact "no space" { exit 1 }
       -exact "not latest" { exit 2 }
       eof { exit 3 }
       -re {-{10}\r\nlicense-+\(y\/n\)} {send "Y\r" ; break }
   }
}
## LOTS OF ACTIONMS here  4hrs ###
# 16200 seconds = 4.5 hours
set timeout 16200

expect {
   -exact "\r\n\r\nfolder path2 : " {send "$DIR2\r"}
# Consider trapping other error strings here so we detect issues before the 4.5h timeout!
   timeout {exit 4}
   eof {exit 5}
}
expect eof

Downside is if you have some unexpected error message with a prompt the script will wait 4.5 hours before timing out. If program closes the eof will trap this fine, but it waits from some sort of acknowledgment etc. the timeout then applies.
This User Gave Thanks to Chubler_XL For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Expect script returning string following a found expect.

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)
Discussion started by: IBGaryA
0 Replies

2. Shell Programming and Scripting

SFTP or scp with password in a batch script without using SSH keys and expect script

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)
Discussion started by: ss112233
5 Replies

3. Programming

Calling another expect script inside an expect script

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)
Discussion started by: brettski
1 Replies

4. UNIX for Advanced & Expert Users

Unable to run the script on remote machine Using Expect script

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)
Discussion started by: Manoj Bajpai
1 Replies

5. Programming

Calling expect script inside another expect

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)
Discussion started by: Priya Amaresh
1 Replies

6. Shell Programming and Scripting

Expect script help needed- script failing if router unavailable

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)
Discussion started by: mrkz1974
3 Replies

7. Shell Programming and Scripting

Expect issues

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)
Discussion started by: EmersonOrci
0 Replies

8. Shell Programming and Scripting

Need help with Expect script for Cisco IPS Sensors, Expect sleep and quoting

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)
Discussion started by: genewolfe
1 Replies

9. Shell Programming and Scripting

Issues with Expect

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)
Discussion started by: twk
1 Replies

10. Shell Programming and Scripting

strange expect script behavior, or am i misunderstanding expect scripting?

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)
Discussion started by: v1k0d3n
2 Replies
Login or Register to Ask a Question