У меня есть два сценария для запуска в оболочке локального компьютера. Первый сценарий - это оболочка BASH, которая вызывает сценарий ожидания внутри себя. Оболочка bash выглядит следующим образом.
СЦЕНАРИЙ ОБОЛОЧКИ BASH SaveOnRemote.sh
#!/bin/bash
REMOTE_IP_ADDR="192.168.100.67"
REMOTE_PASS="some_pass_with_whitespaces"
#The following line space is defined {\ }
PC_EXEC_FILE="/home/workspace/prog/Modified\ code/test/test_file"
#The following line space is included in the variable
TARGET_EXEC_FILE="/sd/1/test/test file target dir/target_file"
#Calling the expect script
scp_ToTarget.exp $REMOTE_PASS $REMOTE_IP_ADDR $PC_EXEC_FILE $TARGET_EXEC_FILE
Конец сценария BASH SaveOnRemote.sh
И еще у нас есть скрипт scp_ToTarget.exp Tcl или Expect, который вызывается внутри оболочки bash.
Tcl Ожидайте СЦЕНАРИЙ scp_ToTarget.exp
#!/usr/bin/expect -f
set remote_password [lrange $argv 0 0]
set remote_ipaddr [lrange $argv 1 1]
set src [lrange $argv 2 2]
set dst [lrange $argv 3 3]
set timeout 3
log_user 1
eval spawn scp $src root@$remote_ipaddr:$dst
match_max 100000
#Look for passwod prompt
set timeout 5
expect {
"*?assword:*" {
send $remote_password\r\n
}
}
## End of Tcl Expect SCRIPT scp_ToTarget.exp
Эти сценарии не работают, и я получаю сообщение об ошибке неизвестного каталога/файла.
На самом деле я не могу избежать пробелов ни в именах файлов, ни в паролях, ни даже в каталогах, и я должен заставить работать скрипты.
Насколько я знаю, если я отправлю команду типа
scp "/tmp/try me.txt" [email protected]:"/sd/no tries/"
это работает, и у меня нет проблем с пробелами. Но как только я нахожусь в Tcl и добавляю двойные кавычки в
"$src" или \"$src\" или "'$src'"
ни один из них не делает синтаксис именно таким, как я хочу, Tcl меняет двойные кавычки на фигурные скобки и т. д. Я застрял в этой проблеме, и я понятия не имею, как решить эту проблему ни в bash, ни в Ожидать или Tcl
Приветствуются любые хорошие ссылки или веб-ссылки для обработки различных строковых переменных в Bash/Tcl. Спасибо.
eval
вeval spawn
- это приведет к тому, что ваша команда не будет работать для параметров с пробелами. - person glenn jackman   schedule 14.12.2012