Expect / TCL简单的proc / variable问题

时间:2014-05-29 18:24:35

标签: linux variables tcl expect procedure

我有一个期望的脚本可以工作,但我试图删除重复的代码并使用proc但是传递给proc的字符串似乎没有被使用。

由于这是我第一次接触TCL /期望它可能是变量传递/使用的基本功能。

我曾经(工作过):

    expect {
        "CONDITION" {}
        timeout { various cleanup operations; send_user "a message"; exit 1 }
    }

并将其更改为(已损坏):

    proc exit_on_error {message} {
        various cleanup operations
        send_user "$message"
        exit 1
    }
    expect {
        "CONDITION" {}
        timeout { exit_on_error "a message" }
    }

它执行所有清理操作并退出,但send_user似乎有空字符串

    send_user $message

抱怨错误的论点数量。

1 个答案:

答案 0 :(得分:3)

bash正在扩展here-doc 中的$message变量,然后将文档发送到预期。

如果您不依赖于在expect脚本中使用shell变量,请引用here-doc:

expect <<-'DONE'

否则,请选择以下选项之一来保护shell中的Tcl变量扩展:

send_user \$message
send_user [set message]

Tcl不要求您引用变量:它扩展变量但将值保持为单个单词。