我有一个期望的脚本可以工作,但我试图删除重复的代码并使用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
抱怨错误的论点数量。
答案 0 :(得分:3)
bash正在扩展here-doc 中的$message
变量,然后将文档发送到预期。
如果您不依赖于在expect脚本中使用shell变量,请引用here-doc:
expect <<-'DONE'
否则,请选择以下选项之一来保护shell中的Tcl变量扩展:
send_user \$message
send_user [set message]
Tcl不要求您引用变量:它扩展变量但将值保持为单个单词。