$pass
como usado no script expect
é uma variável TCL que não tem nada a ver com variáveis shell ou sua infeliz sobreposição com as strings passadas como o ambiente (veja a página environ(7)
man). No TCL, o ambiente pode ser acessado através da variável env
(veja a página tclvars(n)
man). Então,
$ cat envtest
#!/usr/bin/env expect
puts $env(pass)
set pass $env(pass)
puts $pass
$ chmod +x envtest
$ export pass=Hunter2
$ ./envtest
Hunter2
Hunter2
$
Portanto, seu código expect
pode ser escrito como
#!/usr/bin/expect -f
spawn ssh [email protected] -p 2220 -l bandit1
expect "assword:"
send $env(pass)
interact
para acessar diretamente a string de ambiente pass
(bem, uma delas, de qualquer forma, já que não há muito que impedir que variáveis de ambiente duplicadas sejam criadas ...)
Há também um monte de outras maneiras de lidar com senhas em expect
que não envolvem o problema do ambiente (que pode ser passado para processos filhos e lidos por eles ...).