Como posso fazer com que 'espere' ignorar $ (cifrão) em uma senha?

3

Estou executando um script expect e a senha tem um caractere $ . O shell procura os seguintes caracteres para expandir em algo e cospe no such variable .

Existe alguma maneira de contornar isso?

    
por J. George 19.12.2016 / 23:18

2 respostas

6

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)
...
    
por 19.12.2016 / 23:24
0

Eu tive um problema semelhante em que queria passar o fileName com $ no script de expectativa e o seguinte funcionou para mim

filePath=$(echo -n $filePath | sed -e 's/\$/\\$/g')
    
por 18.07.2017 / 21:21