Linux expect脚本中的转义连字符和引号

Linux expect脚本中的转义连字符和引号,linux,expect,Linux,Expect,您好,我正在使用expect自动执行登录任务。 但如果密码以连字符开头,脚本将失败 我怎么能逃脱呢 我很难正确地转义“.”或其他字符。是否有一种方法可以对我所有的字符进行编码并发送,但在发送之前需要对编码的字符串进行解码 这是我的剧本 #!/usr/bin/expect -f spawn ssh -o "PubkeyAuthentication no" -l user 10.10.10.10 expect "password: " send "-cpass\'ok\r" expect "$ "

您好,我正在使用expect自动执行登录任务。 但如果密码以连字符开头,脚本将失败 我怎么能逃脱呢

我很难正确地转义“.”或其他字符。是否有一种方法可以对我所有的字符进行编码并发送,但在发送之前需要对编码的字符串进行解码

这是我的剧本

#!/usr/bin/expect -f
spawn ssh -o "PubkeyAuthentication no" -l user 10.10.10.10
expect "password: "
send "-cpass\'ok\r"
expect "$ "

您可以尝试将密码保存在变量中:

password=-cpass\'ok\r
send "$password"
您只需在每个
'
或空格前面写一个
\

从手册页:

--标志强制将下一个参数解释为字符串而不是标志。任何字符串前面都可以加“-”是否 或者它实际上看起来不是 就像一面旗帜。这提供了一种可靠的机制来指定变量字符串,而不会被那些意外触发的字符串绊倒 看起来像旗帜。(全部 以“-”开头的字符串保留给将来的选项。)

这意味着您应该编写
send
之类的内容:

send -- "-cpass\'ok\r"

注意:尝试传递任何以连字符开头的字符串时都会遇到问题;这不起作用:
send“-cpass”
,如果字符串有连字符,则需要使用
--
标志

您是否试图转义此处的单引号或空格?Tcl/Expect不支持
var=value
语法。