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

4

你好,我使用expect自动化登录任务。但是如果密码以连字符开头,脚本将失败。如何转义它

我在正确转义' "或其他字符方面遇到了很多麻烦。有没有办法编码所有字符并将编码后的字符串发送给expect进行解码,然后再发送

这是我的脚本

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

你是在尝试转义单引号还是空格? - Inian
2个回答

6

从手册页面得知:

该--标志强制将下一个参数解释为字符串而不是标志。无论实际上是否像标志一样,任何字符串都可以以“--”开头。这提供了一种可靠的机制来指定变量字符串,而不会被那些看起来像标志的字符串所干扰。(所有以“-”开头的字符串均保留用于未来选项。)

这意味着您应该像以下方式编写您的send

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

注意:如果您尝试传递任何以连字符开头的字符串,将会出现问题;这是无法正常工作的:send "-cpass"。如果您的字符串中有连字符,您需要使用--标志。

-2

你可以尝试将密码保存在一个变量中:

password=-cpass\'ok\r
send "$password"

在编写代码时,你只需要在每个单引号'、双引号"或者空格前面加上反斜线\即可。


1
Tcl/Expect不支持var=value语法。 - pynexj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接