Here is an expect script that connects and then checks for a file t2. Perhaps this will help until someone more knowledgeable stops by:
Code:
#!/usr/bin/expect --
# @(#) e4 Demonstrate running commands on remote computer with expect.
# Identify local computer, version of expect.
puts " Local computer is [eval exec uname -n]"
puts " Version of expect is [exp_version]."
puts ""
# Read login-name, computer-name, password from file.
set file "data1"
if { ! [file exists $file] } {
puts " File $file not found -- exiting."
exit 1
}
set input [open $file "r"]
set line [gets $input]
set list [split $line]
set login [lindex $list 0]
set box [lindex $list 1]
set password [lindex $list 2]
puts " login is $login, intended remote computer is $box"
set timeout 10
send_user " spawning: ssh $login@$box\n"
spawn ssh $login@$box
expect \[pP]assword:*
send "$password\r"
# send_user "(Got string Password*, sent password $password.)\n"
expect *$box*
# send "ls\r"
send {
bash <<EOF
echo " Hi from a here document on computer $(uname -n)."
if [ ! -f t2 ]
then
echo " There is no file t2, creating it."
touch t2
else
echo " File t2 exists, using it."
fi
ls -l t2
rm t2
EOF
}
expect *$box*
send "exit\r"
expect "logout*"
Producing:
Code:
% ./e4
Local computer is leap
Version of expect is 5.42.1.
login is vanilla, intended remote computer is vm-lenny
spawning: ssh vanilla@vm-lenny
spawn ssh vanilla@vm-lenny
vanilla@vm-lenny's password:
Linux vm-lenny 2.6.26-2-686 #1 SMP Thu Mar 26 01:08:11 UTC 2009 i686
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Apr 23 09:37:28 2009 from leap
bash <<EOF
echo " Hi from a here document on computer $(uname -n)."
if [ ! -f t2 ]
then
echo " There is no file t2, creating it."
touch t2
else
echo " File t2 exists, using it."
fi
ls -l t2
rm t2
EOF
vanilla@vm-lenny:~$
vanilla@vm-lenny:~$ bash <<EOF
> echo " Hi from a here document on computer $(uname -n)."
> if [ ! -f t2 ]
> then
> echo " There is no file t2, creating it."
> touch t2
> else
> echo " File t2 exists, using it."
> fi
> ls -l t2
> rm t2
> EOF
Hi from a here document on computer vm-lenny.
There is no file t2, creating it.
-rw-r--r-- 1 vanilla vanilla 0 2009-04-23 10:13 t2
vanilla@vm-lenny:~$ exit
logout
If you are going to use expect extensively, I suggest the book below ... cheers, drl
Quote:
Title: Exploring Expect
Subtitle: A Tcl-based Toolkit for Automating Interactive Programs
Author: Don Libes
Edition: First
Date: December 1994
Publisher: O'Reilly
ISBN: 1-56592-090-2
Pages: 602
Categories: scripting, interacting, automating, system administration
Comments: 3.5 stars (25 reviews) Amazon.com: Online Shopping for Electronics, Apparel, Computers, Books, DVDs & more
Comments: elderly book, but still useful
This is my shell script which calls an expect file, i am trying to find out server.log file sizes on various servers. But what should be correct way to do that, is there any way i can run a for loop inside the expect file which can take cat <filename> as input. I know for can be used in expect file... (1 Reply)
Hi I have written one shell script , using that i am able to connect to remote machine but i have to
#!/usr/bin/expect -f
set address
set username
set password
set OOLpath
set dbusername
set dbpasswd
set tnsname
set recdbusername
set recdbpasswd
set rectnsname
spawn ssh... (1 Reply)
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)
Hi All,
I have a expect script which is working for single server, but if i am trying to pass value of the variable inside expect, it is not working. Please see below :-
expect -c 'spawn ssh username@ip_address ; expect assword ; send "Password1\n" ; send "uptime \n" ; send "free -m \n" ;... (0 Replies)
Dear friends,
Could you please help me in writing a sample code to connect the remote system (through ssh) using expect in shell script.
Thanks in advance.. :-) (1 Reply)
Hi,
Am trying to transfer file via FTP using expect script from server to client
i need to interrupt the file transfer between server and client
Please help what should used in expect code..
I used
send "ctrl+c\r"
expect "Aborted"
but that didnt work.. I need what should... (3 Replies)
I have to send few gzipped files from local server to SFTP server.
My Server Info
Distributor ID: Ubuntu Description: Ubuntu 12.04.4 LTS Release: 12.04 Codename: precise
Created a bash script and could able to send files to sftp, but i want to send email if transfer is successful.
... (1 Reply)
Hi,
I am executing a expect script in while loop for doing telnet on list of servers stored in file as below :
expect script :
#!/usr/bin/expect -f
set timeout 20
set ip
set port
if { == 0} {
send_user "Usage: scriptname ip port\n"
exit 1
}
#exp_internal 1
log_user 0
spawn... (3 Replies)
Hi I am trying the following in my bash script which logs into my machine and runs a command. Trying to solve this using expect.
The first expect statement is hit and it enters the address "10.10.0.10" but when the second expect statement is hit it exits
#!/bin/bash
expect -c '
spawn... (2 Replies)
Dear Tech Guys,
I am trying to send some commands on the local server and it always asks for user name and password after each command. To serve the purpose I am using expect function as follows:
#!/usr/bin/expect
set timeout 20
spawn "./data1.sh"
expect "Please Enter UserName: "... (6 Replies)
Discussion started by: Xtreme
6 Replies
LEARN ABOUT OSX
lindex
lindex(n) Tcl Built-In Commands lindex(n)
__________________________________________________________________________________________________________________________________________________NAME
lindex - Retrieve an element from a list
SYNOPSIS
lindex list ?index...?
_________________________________________________________________DESCRIPTION
The lindex command accepts a parameter, list, which it treats as a Tcl list. It also accepts zero or more indices into the list. The
indices may be presented either consecutively on the command line, or grouped in a Tcl list and presented as a single argument.
If no indices are presented, the command takes the form:
lindex list
or
lindex list {}
In this case, the return value of lindex is simply the value of the list parameter.
When presented with a single index, the lindex command treats list as a Tcl list and returns the index'th element from it (0 refers to the
first element of the list). In extracting the element, lindex observes the same rules concerning braces and quotes and backslashes as the
Tcl command interpreter; however, variable substitution and command substitution do not occur. If index is negative or greater than or
equal to the number of elements in value, then an empty string is returned. The interpretation of each simple index value is the same as |
for the command string index, supporting simple index arithmetic and indices relative to the end of the list.
If additional index arguments are supplied, then each argument is used in turn to select an element from the previous indexing operation,
allowing the script to select elements from sublists. The command,
lindex $a 1 2 3
or
lindex $a {1 2 3}
is synonymous with
lindex [lindex [lindex $a 1] 2] 3
EXAMPLES
lindex {a b c}
-> a b c
lindex {a b c} {}
-> a b c
lindex {a b c} 0
-> a
lindex {a b c} 2
-> c
lindex {a b c} end
-> c
lindex {a b c} end-1
-> b
lindex {{a b c} {d e f} {g h i}} 2 1
-> h
lindex {{a b c} {d e f} {g h i}} {2 1}
-> h
lindex {{{a b} {c d}} {{e f} {g h}}} 1 1 0
-> g
lindex {{{a b} {c d}} {{e f} {g h}}} {1 1 0}
-> g
SEE ALSO
list(n), lappend(n), linsert(n), llength(n), lsearch(n), lset(n), lsort(n), lrange(n), lreplace(n), string(n) |
KEYWORDS
element, index, list
Tcl 8.4 lindex(n)