背景:特殊文字のパスワードのテストに使用されるexpectスクリプトを作成しようとしています。実行に失敗したテストケースの1つは、パスワードの前に特殊文字「-」を付けることです。例: "-foo"注:sshキーは問題外であると想定します注:bashシェルが私が使用しているシェルであると想定します
私のコード:これは私の接続機能であり、ウィキペディアの厚意によります:
proc connect {passwd} {
expect {
"yes/no" {
send "yes\r"
}
}
expect {
"?assword:" {
send "$passwd\r"
expect {
"sftp*" {
return 0
}
}
}
}
# timed out
return 1
}
set user [lindex $argv 0]
set passwd [lindex $argv 1]
set host [lindex $argv 2]
spawn sftp $user@$host
puts '$passwd'\r
set rez [connect $passwd]
私のbashスクリプトには、次のものがあります。
passwd="-foo"
./sftp_test $user $passwd $host
私が試したこと:問題は、シェルが変数を展開しているため、コマンドがsend -fooとして解釈され、sendに無効なパスワードがあることを示していることです。
これに対する一般的な解決策として一重引用符を使用しようとしましたが、パスワードが拒否されています(一重引用符が保持されていると思われます)。'$ passwd'"\r"を送信します
質問:sendコマンドでパスワードをエスケープして、パスワード内の特殊文字のすべての順列($fooとf$ ooと-fooなど)に使用できるようにする方法はありますか?