How do I use grep output in an expect script?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How do I use grep output in an expect script?
# 1  
Old 09-06-2014
How do I use grep output in an expect script?

Hi,

I am using expect to ssh to a remote host and run a program on the remote machine which has a variable runtime. I need to wait until it finishes so I can grab the output file of this program. I am trying to use the output of grep to know when the process finishes. I am trying to capture the PID and use it in a loop to determine when it's finished, like this:

Code:
set program "nameOfProgram"
set psVar "ps -ef | grep $program | grep -v grep | {awk '{ print $2 }'}"

expect "$PROMPT" {   
    send "pidVar=`$psVar`\r"
}

while {1} {

    sleep $waitTime
    expect {
	"$pidVar*$PROMPT" {
	    send "$psVar\r"
	}
	"$PROMPT" {
	    sleep 1
	    break
	}
    }
}


The behavior of this code is that '$pidVar' is only visible in the remote shell, not in my expect script. If I replace the while loop with 'interact', I can echo $pidVar but I can't seem to use it in the while loop.

I seem to be missing something fundamental. Any suggestions??

vagabond1964
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Redirect script output to file after grep

i have simple program that generate log file 1 line every sec, i need to do grep for specific record then redirect to another file. #!/bin/bash for i in `seq 1 20`; do echo $i sleep 1 done ./test.sh |egrep "5|10|15" 5 10 15 r ./test.sh... (2 Replies)
Discussion started by: before4
2 Replies

2. Shell Programming and Scripting

Capture output from expect script

Hi I am new to Expect scripting. I have to connect to a remote server and capture the output. Here I need output of " send "list registered\r"" to be stored in a file. but after execution, /tmp/capture.txt is of 0 byte #!/usr/bin/expect spawn ssh abc@10.10.10.10 -p 5022 expect... (2 Replies)
Discussion started by: bns928
2 Replies

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

4. Shell Programming and Scripting

Expect Script - Not Seeing Output from While Loop

I know something simple is missing here, "log_user 1" is set . . . after this utility opens ${InFile} (handle? for IntInFile) it needs to look for something to appear in the file ${IntInFile} and then send it to the spawned process. Then I am locking the file ${IntInFile} and clearing it out -... (0 Replies)
Discussion started by: JuanMatteo
0 Replies

5. Shell Programming and Scripting

Help capturing output of expect script

match_max 500000 set timeout 30 set outcome1 {} set outcome2 {} set inputfile C:\\Users\\Administrator\\Desktop\\inputfile.txt send -i $con "\r"; expect -i $con "Desktop>" { exp_send "type $inputfile \r" } set timeout 30 expect { "Desktop>" { set outcome $expect_out(0,string);}... (3 Replies)
Discussion started by: cityprince143
3 Replies

6. Shell Programming and Scripting

ksh script to process grep output

Hi, I would like to know how can i pipe the following output of grep into a predefined output format This is the output of the grep command grep record *.txt | sort -r 2010-04-28-11-12-21.txt:C The user has created a record 2010-04-29-10-18-41.txt:U The user has updated a record... (8 Replies)
Discussion started by: alienated
8 Replies

7. Shell Programming and Scripting

Expect script without user seeing output or input

I want a shell script to call an expect script but I want the expect script to run in the background so the user is not bothered with what is going on. Is there any way to do this? ---------- Post updated at 08:23 PM ---------- Previous update was at 07:39 PM ---------- got it it was ... (1 Reply)
Discussion started by: los21282
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

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

10. Shell Programming and Scripting

Expect - Interact output hangs when large output

Hello, I have a simple expect script I use to ssh to a workstation. I then pass control over to the user with interact. This script works fine on my HP and Mac, but on my Linux Desktop, I get a problem where the terminal hangs when ever I execute a command in the interact session that requires a... (0 Replies)
Discussion started by: natedog
0 Replies
Login or Register to Ask a Question
rsh(1c) 																   rsh(1c)

Name
       rsh - remote shell

Syntax
       rsh host [-l username] [-n] command
       host [-l username] [-n] command

Description
       The  command  connects to the specified host, and executes the specified command.  The command copies its standard input to the remote com-
       mand, the standard output of the remote command to its standard output, and the standard error of the remote command to its standard error.
       Interrupt, quit and terminate signals are propagated to the remote command.  The command normally terminates when the remote command does.

       The  remote  username  used is the same as your local username, unless you specify a different remote name with the -l option.  This remote
       name must be equivalent, in the sense of to the originating account.  No provision is made for specifying a password with a command.

       If you omit command, then instead of executing a single command, you are logged in on the remote host using

       Shell metacharacters which are not quoted are interpreted on local machine, while quoted  metacharacters  are  interpreted  on  the  remote
       machine.  Thus the command

	  rsh otherhost cat remotefile >> localfile

       appends the remote file remotefile to the localfile localfile, while

	  rsh otherhost cat remotefile ">>" otherremotefile

       appends remotefile to otherremotefile.

       Host  names are given in the file Each host has one standard name (the first name given in the file), which is rather long and unambiguous,
       and optionally one or more nicknames.  The host names for local machines are also commands in the directory If you put  this  directory	in
       your search path then the can be omitted.

Options
       -l username	   Logs you in as the specified user, not as your user login name.

       -n		   Redirects all command input to

Restrictions
       The  command  is  confused by output generated by commands in a .cshrc file on the remote host.	In particular, `where are you?' and `stty:
       Can't assign requested address' are messages which can result if output is generated by the startup file.

       If you are using and put a in the background without redirecting its input away from the terminal, it blocks even if no reads are posted by
       the remote command.  If no input is desired you should redirect the input of to using the -n option.

       You cannot run an interactive command like Use

       Stop signals stop the local process only.

Files
       /etc/hosts
       /usr/hosts/*

See Also
       rlogin(1c)

																	   rsh(1c)