【问题标题】:escaping hyphen and quotes in expect script在期望脚本中转义连字符和引号
【发布时间】:2017-07-12 15:30:25
【问题描述】:

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

我在正确转义 '" 或其他字符时遇到了很多麻烦有没有办法可以对我的所有字符进行编码并发送期望的编码字符串,以便在发送之前对其进行解码

这是我的脚本

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

【问题讨论】:

  • 你是要转义单引号还是这里的空格?

标签: linux expect


【解决方案1】:

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

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

您只需在每个'" 或空格前写一个\

【讨论】:

  • Tcl/Expect 不支持var=value 语法。
【解决方案2】:

来自手册页:

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

这意味着你应该写你的send 类似:

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

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

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多