Expect script problem | Unix Linux Forums | Shell Programming and Scripting

  Go Back    


Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here.

Expect script problem

Shell Programming and Scripting


Closed Thread    
 
Thread Tools Search this Thread Display Modes
    #1  
Old 04-14-2008
jdyck jdyck is offline
Registered User
 
Join Date: Apr 2008
Last Activity: 11 September 2008, 7:09 PM EDT
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
Expect script problem

Hello all you scripting Gurus,

I have an expect script that gets called from an AppleScript Studio app that basically takes arguments for user name, password, and server address and then calls rsync. Everything works wonderfully, EXCEPT (there had to be one of those) if the user name starts with a t, such as "test_student", the t gets converted to a 'tab' and I instead get "[tab]est_student", which obviously won't authenticate properly.

In the following code, the problem happens at the end of the spawn line, the $login variable has the problem (although I haven't tested to see if $server and $password variables have the same problem).

I guess my question is if there is a way to make it so that expect just enters the text and doesn't try to do fancy [tabs] and such? Is there a best practice in a script like this to make sure that doesn't happen?

Thanks in advance for any help offered.

Jeff
--------

The script is as follows:


Code:
#!/usr/bin/expect --
#
# Student Backup Script
# 
# Purpose:      Based on provided login name, password and server, 
#				backup the user's Documents folder.
# Requires:     TCL and Expect extension
# Author:       Jeff Dyck
# Date:         12/18/2007
#
#               Usage format is ExpectBackup.sh username password server

# Bring in the variables...

set timeout 20

set localUser [exec whoami]
set login [lindex \\$argv 0]
set password [lindex \\$argv 1]
set server [lindex \\$argv 2]
set mode [lindex \\$argv 3]

# Begin syncronization...

spawn time rsync -a -z -E --exclude-from=/tmp/exclude.txt --progress --partial --timeout=30 -e ssh /Users/$localUser/Documents $login@$server:

expect {
       "(yes/no)?"  { send "yes\r"; exp_continue}
       "?assword:"  { send "$password\r"; exp_continue}
       }
       
# Wait for rsync to finish.
# expect eof

# Done.

exit 0

Sponsored Links
    #2  
Old 04-15-2008
sysgate's Avatar
sysgate sysgate is offline Forum Advisor  
Unix based
 
Join Date: Nov 2006
Last Activity: 20 November 2013, 8:29 AM EST
Location: Bulgaria
Posts: 1,419
Thanks: 0
Thanked 6 Times in 6 Posts
I think that expect uses single backslash to escape characters, at least that's the way I do in some of my scripts. Try that and let us know.
Sponsored Links
    #3  
Old 04-15-2008
jdyck jdyck is offline
Registered User
 
Join Date: Apr 2008
Last Activity: 11 September 2008, 7:09 PM EDT
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
Slashes as escape characters don't seem to work...

Thanks for taking the time to offer your suggestion sysgate. I just tried modifying the script to use both forward and backward slashes, neither did what I wanted, but they had very different results...

When I used a backward slash (\) I got the following rsync command out of the expect script - the escape character seems to have just nulled the $ so I get the variable name inserted, rather than the variable's value:


Code:
spawn time rsync -a -z -E --exclude-from=/tmp/exclude.txt --progress --partial --timeout=30 -e ssh /Users/admin/Documents $login@time-od.csf.bc.ca:

When I used a forward slash (/) I got the following,which is the same as before, adding an unwanted [tab]:

Code:
spawn time rsync -a -z -E --exclude-from=/tmp/exclude.txt --progress --partial --timeout=30 -e ssh /Users/admin/Documents /	est_student@time-od.csf.bc.ca:

I even tried entering both / and \ in front of test_student right in the original command and that doesn't help either... / just adds the / in front of test_student (so does get rid of the [tab], but also doesn't give the right command) and \ doesn't seem to do anything, still end up with [tab]est_student.

What IS interesting to me is that I entered the server as 'time' simply to test if that 't' was also coming out as a [tab] - as you can see from the results, it isn't - I suspect because it's immediately behind the @ character. So perhaps this is something to do with having the variable right after a space.

So back to the drawing board. Any other ideas?

Jeff
    #4  
Old 04-15-2008
ramen_noodle ramen_noodle is offline Forum Advisor  
Registered User
 
Join Date: Dec 2007
Last Activity: 23 December 2008, 1:00 PM EST
Location: Virginia, USA.
Posts: 251
Thanks: 0
Thanked 1 Time in 1 Post
I don't understand why this script attempts to escape the variable notation ($)
preceding the argv list.
it is utterly broken this way.
example:

Code:
proc randlist {len {components "satrednfgbhj"}} {
set i 0
                      while {$i < $len} {
                            set a [expr int(1 + rand() * [string length $components] - 1)]
                             lappend ret "[string index $components $a]"
                             incr i
                       }
                       return $ret
}

foreach a [randlist 23] {puts -nonewline "No interp of escape = \\$a\nAnd interpreted = " ; eval puts "\\$a"}


Code:
Output of above:
No interp of escape = \f
And interpreted =  
No interp of escape = \n
And interpreted = 

No interp of escape = \j
And interpreted = j
No interp of escape = \e
And interpreted = e
No interp of escape = \t
And interpreted = 	
No interp of escape = \j
And interpreted = j
No interp of escape = \e
And interpreted = e
No interp of escape = \e
And interpreted = e
No interp of escape = \n
And interpreted = 

No interp of escape = \f
And interpreted =  
No interp of escape = \t
And interpreted = 	
No interp of escape = \e
And interpreted = e

Short answer: There is no need to escape the dollar sign notation and it breaks interpretation of characters during command expansion.
Sponsored Links
    #5  
Old 04-15-2008
jdyck jdyck is offline
Registered User
 
Join Date: Apr 2008
Last Activity: 11 September 2008, 7:09 PM EDT
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
That did it!!! Thanks ramen_noodle

ramen_noodle,

I removed the \\'s from the argv entries at the beginning of the script and that seems to have fixed the problem. It's been a while since I wrote this script originally, but I believe I grabbed that syntax from a sample script I found online, so big ooops I guess.

Thanks for pointing out what I wasn't seeing, may much good karma come your way .

Jeff
Sponsored Links
Closed Thread

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
problem with expect bkumar82 Shell Programming and Scripting 4 01-04-2011 07:42 PM
expect script problem etxnreg Shell Programming and Scripting 1 12-22-2010 09:45 AM
Need help with Expect script for Cisco IPS Sensors, Expect sleep and quoting genewolfe Shell Programming and Scripting 1 10-01-2009 11:12 AM
Problem in expect script with password involving trailing backslash pradeeptyagi23 Shell Programming and Scripting 4 06-20-2009 04:27 AM
strange expect script behavior, or am i misunderstanding expect scripting? v1k0d3n Shell Programming and Scripting 2 12-10-2008 03:31 PM



All times are GMT -4. The time now is 12:44 AM.