Sponsored Content
Top Forums UNIX for Dummies Questions & Answers Expect "interact" fails when called from another script Post 302394516 by treesloth on Thursday 11th of February 2010 04:50:50 PM
Old 02-11-2010
Expect "interact" fails when called from another script

So, I have an expect script (let's call it expect.exp) that takes 3 arguments. It logs into a remote server, runs a set of commands, then hands control over to the user by the "interact" command. If I call this script from the command line, it works properly.

Now I'd like to apply this script to several servers-- log in, view the automated command output, interact as needed, log out, and get jumped straight to the next server. The reasonable approach, it seems, is to create a file that has the parameters in some nice format, like CSV, then use a wrapper to call the nice, proven expect script... something like:

Code:
while read LINE; do
     (assign each field of the line to a variable; say opt1, opt2, opt3)
     ./expect.exp opt1 opt2 opt3
done

I would expect this to log on, run the automated commands, hand me control, and wait for me to log off; then, once I've logged off that particular server, it would automatically log me onto the next one, run the automated commands, hand over control... you get the idea... until the list is finished. Instead, it logs on to the first server, runs the commands, apparently logs off, and drops me back to a prompt on the server I'm running this from. Only the first line of inputs is used. Why is that? This seems straightforward enough, but apparently it isn't. I'd like to understand this behavior and see how to fix it.

Last edited by treesloth; 02-11-2010 at 06:00 PM..
 

10 More Discussions You Might Find Interesting

1. HP-UX

Shell Script fails with "can't connect to client"

Hi Unix Gurus, I have written a shell script to unfreeze all frozen media in NetBackup. Here is the script written on HP-UX using ksh: *********************************************** set -x cd $HOME rm -f frozentest rm -f mediaserver cd /usr/openv/netbackup/bin/admincmd pbrun... (2 Replies)
Discussion started by: sseenu79
2 Replies

2. UNIX for Dummies Questions & Answers

#!/bin/sh script fails at StringA | tr "[x]" "[y]"

I need to take a string (stringA) check it for spaces and replace any spaces found with an equal (=) sign. This is not working. There are spaces between each component: $StringA | tr "" "" The error returned is: test: Specify a parameter with this command Can you help? (3 Replies)
Discussion started by: by_tg
3 Replies

3. Windows & DOS: Issues & Discussions

Samba (SMB) client fails: "Called name not present"

Hi, I issue smbclient on a Linux REd hat server : smbclient -L ***.16.0.42 -U domaine/Administrator Password: Domain= OS= Server= Domain= OS= Server= Sharename Type Comment --------- ---- ------- IPC$ IPC IPC distant ... (0 Replies)
Discussion started by: big123456
0 Replies

4. UNIX for Advanced & Expert Users

All alias in .profile lost when "script" command is called

Hi, I was trying to call "script <an ip add>" command from .profile file to log everything whenever anyone logs in to this user. I did the following at the end of .profile. 1) Extracted the IP address who logged in 2) Called script < ip add> . The problem I am facing is all, aliases etc. written... (3 Replies)
Discussion started by: amicon007
3 Replies

5. UNIX for Dummies Questions & Answers

Problems with "exit" called from function in bourne script

Hi everyone. #!/sbin/sh EXITING() { umount /FOLDER rm -Rf /FOLDER echo "EXIT" exit 0 } EXITING echo "OK" (8 Replies)
Discussion started by: vacadepollo
8 Replies

6. Shell Programming and Scripting

Expect Scripting - Using the "interact" command?

Hello All, I am writing an Expect Script to execute some commands over ssh then exit the script. The script works just fine if I automate everything and assuming the correct password was entered. So this Expect Script gets executed from a Bash script... From the Bash script I pass along an... (0 Replies)
Discussion started by: mrm5102
0 Replies

7. Shell Programming and Scripting

Bash script fails with "function: not found" error

Hello everyone, I am having problems figuring this out. This script below is supposed to create a list of file names with their "md5sum", in a file "lib-list.txt" When I run it "sh component-list.sh " I get this:component-list.sh: 4: component-list.sh: function: not found component-list.sh:... (4 Replies)
Discussion started by: joemb
4 Replies

8. Shell Programming and Scripting

Can someone please show me a very simple "expect" script to change password in Solaris please?

Ladies & Gents, Can one of you gurus please show me a very simple "expect" script to change the password in Solaris in a script, please? Nothing fancy, no error checking, no nothing. Just to change the password of a new user, it's all. Many thanks in advance. U guys have honestly earned my... (1 Reply)
Discussion started by: Hiroshi
1 Replies

9. Shell Programming and Scripting

Expect: spawn id exp5 not open while executing "expect "$" { send "sudo su -\r" }"

Hi All, i am trying to ssh to a remote machine and execute certain command to remote machine through script. i am able to ssh but after its getting hung at the promt and after pressing ctrl +d i am gettin the out put as expect: spawn id exp5 not open while executing "expect "$" {... (3 Replies)
Discussion started by: Siddharth shivh
3 Replies

10. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies
RUNSCRIPT(1)						      General Commands Manual						      RUNSCRIPT(1)

NAME
runscript - script interpreter for minicom SYNOPSIS
runscript scriptname [logfile [homedir]] DESCRIPTION
runscript is a simple script interpreter that can be called from within the minicom communications program to automate tasks like logging in to a unix system or your favorite bbs. INVOCATION
The program expects a script name and optionally a filename and the user's home directory as arguments, and it expects that it's input and output are connected to the "remote end", the system you are connecting to. All messages from runscript ment for the local screen are directed to the stderr output. All this is automatically taken care of if you run it from minicom. The logfile and home directory parame- ters are only used to tell the log command the name of the logfile and where to write it. If the homedir is omitted, runscript uses the directory found in the $HOME environment variable. If also the logfile name is omitted, the log commands are ignored. KEYWORDS
Runscript recognizes the following commands: expect send goto gosub return ! exit print set inc dec if timeout verbose sleep break call log OVERVIEW OF KEYWORDS
send <string> <string> is sent to the modem. It is followed by a ' '. <string> can be: - regular text, eg 'send hello' - text enclosed in quotes, eg 'send "hello world"' Within <string> the following sequences are recognized: - newline - carriage return a - bell  - backspace c - don't send the default ' '. f - formfeed o - send character o (o is an octal number) Also $(environment_variable) can be used, for example $(TERM). Minicom passes three special environment variables: $(LOGIN), which is the username, $(PASS), which is the password, as defined in the proper entry of the dialing directory, and $(TERMLIN) which is the number of actual terminal lines on your screen (that is, the statusline excluded). print <string> Prints <string> to the local screen. Default followed by ' '. See the description of 'send' above. label: Declares a label (with the name 'label') to use with goto or gosub. goto <label> Jump to another place in the program. gosub <label> Jumps to another place in the program. When the statement 'return' is encountered, control returns to the statement after the gosub. Gosub's can be nested. return Return from a gosub. ! <command> Runs a shell for you in which 'command' is executed. On return, the variable '$?' is set to the exit status of this command, so you can subsequently test it using 'if'. exit [value] Exit from "runscript" with an optional exit status. (default 1) set <variable> <value> Sets the value of <variable> (which is a single letter a-z) to the value <value>. If <variable> does not exist, it will be created. <value> can be a integer value or another variable. inc <variable> Increments the value of <variable> by one. dec <variable> Decrements the value of <variable> by one. if <value> <operator> <value> <statement> Conditional execution of <statement>. <operator> can be <, >, != or =. Eg, 'if a > 3 goto exitlabel'. timeout <value> Sets the global timeout. By default, 'runscript' will exit after 120 seconds. This can be changed with this command. Warning: this command acts differently within an 'expect' statement, but more about that later. verbose <on|off> By default, this is 'on'. That means that anything that is being read from the modem by 'runscript', gets echoed to the screen. This is so that you can see what 'runscript' is doing. sleep <value> Suspend execution for <value> seconds. expect expect { pattern [statement] pattern [statement] [timeout <value> [statement] ] .... } The most important command of all. Expect keeps reading from the input until it reads a pattern that matches one of the specified ones. If expect encounters an optional statement after that pattern, it will execute it. Otherwise the default is to just break out of the expect. 'pattern' is a string, just as in 'send' (see above). Normally, expect will timeout in 60 seconds and just exit, but this can be changed with the timeout command. break Break out of an 'expect' statement. This is normally only useful as argument to 'timeout' within an expect, because the default action of timeout is to exit immediately. call <scriptname> Transfers control to another scriptfile. When that scriptfile finishes without errors, the original script will continue. log <text> Write text to the logfile. NOTES
If you want to make your script to exit minicom (for example when you use minicom to dial up your ISP, and then start a ppp or slip session from a script), try the command "! killall -9 minicom" as the last script command. The -9 option should prevent minicom from hanging up the line and resetting the modem before exiting. Well, I don't think this is enough information to make you an experienced 'programmer' in 'runscript', but together with the examples it shouldn't be too hard to write some useful script files. Things will be easier if you have experience with BASIC. The minicom source code comes together with two example scripts, scriptdemo and unixlogin. Especially the last one is a good base to build on for your own scripts. BUGS
Runscript should be built in to minicom. AUTHOR
Miquel van Smoorenburg, <miquels@drinkel.ow.org> Jukka Lahtinen, <walker@clinet.fi> User's Manual $Date: 2000/02/10 10:28:00 $ RUNSCRIPT(1)
All times are GMT -4. The time now is 04:25 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy