2017-02-13 8 views
0

Я пытаюсь написать сценарий, который будет прикреплять файлы к моей учетной записи разработчика amazon. Вот сценарий:Почему я получаю одинарные кавычки и неожиданное поведение в сценарии ожидания?

#!/usr/bin/expect -- 
# 
# 
set timeout -1 
#log_user 1 

if {[llength $argv] < 3 } { 
     puts "usage: sftp-to-amazon.exp <APPCODE> <APPNAME> <SFTP_USER>" 
     puts "" 
     puts "This script will sftp binary files to the amazon sftp server for the given APPCODE." 
     puts "and APPNAME. APPNAME is like Dragnet_AMZ_1951_V4." 
     puts "You can get the APPCODE from the Amazon Developers Console." 
     exit 1 
} 

set appcode [lindex $argv 0] 
set appname [lindex $argv 1] 
set sftp_user [lindex $argv 2] 


puts "App code is $appcode app name is $appname sftp_user is $sftp_user" 

stty -echo 
send_user "Enter password for $sftp_user: " 
expect_user -re "(.*)\n" 
set sftp_pass $expect_out(1,string) 

set sftp_host 'dar.amazon-digital-ftp.com' 

puts "/usr/bin/sftp -o 'StrictHostKeyChecking no' ${sftp_user}@${sftp_host}" 
if [ catch "spawn /usr/bin/sftp -o 'StrictHostKeyChecking no' [email protected]$sftp_host" reason ] { 
     puts "failed to spawn line 115 /usr/bin/sftp [email protected]$sftp_host : $reason\n" 
     set success 0 
     exit 1 
} 
expect -re "[email protected]$sftp_host's password: $" { 
     puts "Sending password" 
     send "$sftp_pass\r" 
} 

puts "Script complete." 

Когда я запускаю скрипт я получаю этот выход:

$ ./sftp-to-amazon.exp M1S3R61WOY9B0 ONETWO VM3H65THINGBATFA7 
App code is M1S3R61WOY9B0 app name is ONETWO sftp_user is VM3H65THINGBATFA7 
Enter password for VM3H65THINGBATFA7: /usr/bin/sftp -o 'StrictHostKeyChecking no' [email protected]'dar.amazon-digital-ftp.com' 
spawn /usr/bin/sftp -o 'StrictHostKeyChecking no' [email protected]'dar.amazon-digital-ftp.com' 
command-line: line 0: Bad configuration option: 'stricthostkeychecking 
Couldn't read packet: Connection reset by peer 
Script complete. 

Когда я бегу ...

/usr/bin/sftp -o 'StrictHostKeyChecking no' [email protected]'dar.amazon-digital-ftp.com' 

... сама по себе от Командная строка работает отлично.

ответ

1

Поскольку одинарные кавычки не имеют особого значения в ожидании (Tcl).

if [ catch "spawn /usr/bin/sftp -o 'StrictHostKeyChecking no' [email protected]$sftp_host" reason ] { 
#         ^..................... ..^ 
#         two separate words with literal quote chars 

Tcl эквивалент одиночных кавычек оболочки - это фигурные скобки. Вам необходимо

if [ catch "spawn /usr/bin/sftp -o {StrictHostKeyChecking no} [email protected]$sftp_host" reason ] { 
#         ^........................^ 
#         one word 
+0

Спасибо! Это помогло удалить «символы». Мне нужно разработать шаблон регулярного выражения, который я подозреваю. –