How to end Expect script?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to end Expect script?
# 1  
Old 06-29-2011
How to end Expect script?

Hi,
I'm not sure how to properly end an Expect script that will eventually be called by a cronjob. Right now, I'm running it from the command line. The gist of it:

spawn $env(SHELL)

### SSH to remote server

### perform operation

### logout

### now at parent shell, do a SCP

### SCP done, now need to exit
expect eof


However, it never really exits when I'm testing this. I see the prompt back after the scp, but it is still expecting the next input (i.e. any command I type just sits there until I do a ctrl-c). If I do "interact", then I'm able to regain shell back.

Eventually this will be called by a cronjob and I don't want multiple dead shells sitting out there. Will this be the case?

Appreciate any pointers.
# 2  
Old 06-30-2011
what is your full code?
# 3  
Old 06-30-2011
Perhaps I wasn't clear in my original post. The script is working, but I'm not sure how to properly exit from Expect when invoking manually from a term vs calling it from a cron job.

Here's a little bit more of the code.
Code:
#!/usr/bin/expect -f

set timeout -1

##
## START OF SCRIPT
##
spawn $env(SHELL)

### SSH to remote server
send -- "ssh root@myserver\r"
... (code removed) ...

### perform operation
... (code removed) ...

### logout
send -- "logout\r"
... (code removed) ...

### now at parent shell, do a SCP
send -- "scp root@myserver:/path/to/file/somefile.tar .\r"
expect -exact "root@myserver's password"
send -- "mypassword\r"
expect -regexp {..*}

### SCP done, now need to exit
expect eof

It is the last line I'm not sure what I need to send. I've tried the following in one form or another based on other threads. If I'm running manually, it appears, I just need to supply interact. If I'm calling this from a cron job eventually, I just want to make sure Expect exits properly and I do not have zombie shells. Thanks.
Code:
#send -- "^C\r"
#expect eof
#interact
#catch wait result
#exit 0


Last edited by Franklin52; 06-30-2011 at 12:11 PM.. Reason: Please use code tags, thank you
# 4  
Old 06-30-2011
you're spawning an instance of a shell.. you need to exit the shell or spawn scp instead of shell.
# 5  
Old 06-30-2011
How do I end the shell? Send the ^D char? I recall trying this but when testing from the term, I still do not get control back after the script ends.

Can you provide an example of how to properly exit assuming I spawn? Thanks.
# 6  
Old 06-30-2011
Not 100% clear on the expect syntax for it, but if you can close the file handle you write shell commands into, the shell will get EOF and quit.
# 7  
Old 06-30-2011
As trey85stang said, you need to send exit to the shell or directly spawn ssh (I would choose the second one ...).
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. 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

5. 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

6. Programming

Expect script to run a Shell script on remote server

Hi All, I am using a expect script to run a shell script on remote server, the code is as follows. But the problem is that it executes only first command, and hangs it doesn't run the next commands. spawn ssh $uid@$host expect "password:" send "$password\r" expect "*\r" send... (2 Replies)
Discussion started by: yashwanthsn
2 Replies

7. Shell Programming and Scripting

Use of Begin IF ,END IF END not working in the sql script

Hi I have written a script .The script runs properly if i write sql queries .But if i use PLSQL commands of BEGIN if end if , end ,then on running the script the comamds are getting printed on the prompt . Ex :temp.sql After connecting to the databse at the sql prompt i type... (1 Reply)
Discussion started by: isha_1
1 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

Expect Script - No End

Hi folks, Im new on expect. I'd like to develop an expcet script which copies a file to a host trough scp and after that the script makes an ssh to the specified host and executes the file. Currently I have the following Script: #!/usr/bin/expect -f set password set ipaddr set... (1 Reply)
Discussion started by: domi55
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