背景:我正在尝试编写一个用于测试特殊字符密码的期望脚本。我无法执行的测试用例之一是密码前有特殊字符“-”。例如:“-foo” 注意:假设 ssh 密钥不在问题范围内 注意:假设 bash shell 是我正在使用的 shell
我的代码:这是我的连接功能,由维基百科提供:
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
我已经尝试过:据我了解,问题是shell正在扩展变量,因此命令被解释为send -foo,它说send的密码无效。
我尝试使用单引号作为解决此问题的一般解决方案,但密码被拒绝(我怀疑单引号被保留)。发送'$passwd'"\r"
问题:有没有办法让我在发送命令中转义密码,以便我可以将它用于密码中特殊字符的所有排列(例如 $foo 和 f$oo 和 -foo)?