Você está tornando as coisas mais complicadas para si mesmo escrevendo isso como um script bash
que chama expect
em vez de escrever isso como um script expect
(ou até mesmo um script env
). Isso significa que você precisa obter dois esquemas de cotação diferentes para cooperar. Em tcl
você acessa os parâmetros da linha de comando através da lista $argv
#!/usr/bin/env expect
set arg1 [lindex $argv 0]
if {$arg1 == "TEST"} {
set user "xxx"
set host "host1"
set pass "testpass"
} elseif {$arg1 == "LIVE"} {
set user "yyy"
set host "host2"
set pass "livepass"
} else {
send_user "First parameter is not TEST or LIVE"
exit 1
}
spawn scp "$user@$host:~/path/dir/some.log" /home/some.log
expect "yes/no)? " {send "yes\r" ; exp_continue} "Password"
send "$pass\r"
Ter senhas em scripts não é ótimo, mas provavelmente é melhor do que passá-las na linha de comando.