Existem duas maneiras; ou barra invertida, cada caractere especial ou, em vez disso, use chaves ao redor da senha:
expect1.1> set pass "\$Hunter2"
$Hunter2
expect1.2> set pass {$Hunter2}
$Hunter2
Três! Três formas: a senha pode ser lida no arquivo thepasswordfile
; isso tem a vantagem da senha não estar no código:
#!/usr/bin/env expect
# wrap with catch(n) or try(n) if you don't want an error to abort
# the code...
set fh [open thepasswordfile]
set password [gets $fh]
puts $password
Quatro, coletar a senha de um programa que a produz na saída padrão:
#!/usr/bin/env expect
if {[catch {exec ./getthepassword} results options]} {
puts $results
exit 1
}
puts $results
O que pode parecer algo como:
$ cat fromstdin
#!/usr/bin/env expect
if {[catch {exec ./getthepassword} results options]} {
puts $results
exit 1
}
puts $results
$ cat getthepassword
#!/bin/sh
echo '$Hunter2'
$ chmod +x fromstdin getthepassword
$ ./fromstdin
$Hunter2
$
Cinco! Cinco maneiras, a senha também pode ser lida do ambiente ( environ(7)
, tclvars(n)
)
#!/usr/bin/env expect
set password $env(pass)
puts $password
assumindo que export pass='$Hunter2'
ou equivalente tenha sido feito no processo pai antes de chamar esta implementação. Desvantagem: as variáveis de ambiente são passadas para todo e qualquer processo filho, que pode ou não precisar ter direitos para visualizar a senha. Em caso de dúvida, desmarque a variável depois de usá-la ou copiá-la:
#!/usr/bin/env expect
set password $env(pass)
unset env(pass)
...