「expect」にパスワードの$(ドル記号)を無視させる方法は?

「expect」にパスワードの$(ドル記号)を無視させる方法は?

スクリプトを実行しており、expectパスワードに1$文字があります。シェルは次の文字を見つけて何かに展開し、それをエクスポートしますno such variable

この問題を解決する方法はありますか?

ベストアンサー1

2つの方法があります。すべての特殊文字をバックスラッシュするか、パスワードの周りに中括弧を使用します。

expect1.1> set pass "\$Hunter2"
$Hunter2
expect1.2> set pass {$Hunter2}
$Hunter2

サム! 3つの方法:ファイルからパスワードを読みますthepasswordfile。この方法の利点は、パスワードがコードにないことです。

#!/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

4.標準出力からパスワードを生成するプログラムからパスワードを収集します。

#!/usr/bin/env expect

if {[catch {exec ./getthepassword} results options]} {
    puts $results
    exit 1
}

puts $results

これは次のようになります。

$ 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
$ 

五!環境でパスワードを読む5つの方法(environ(7)、、tclvars(n)

#!/usr/bin/env expect
set password $env(pass)
puts $password

export pass='$Hunter2'この実装を呼び出す前に、親プロセスで同等の操作が完了したとします。欠点:環境変数は、パスワードを表示するために権限が必要な場合と必要ない場合があるすべての子プロセスに渡されます。疑わしい場合は、変数を使用またはコピーして変数の設定を解除してください。

#!/usr/bin/env expect
set password $env(pass)
unset env(pass)
...

おすすめ記事