问题描述
我正在尝试运行此脚本,其中expect 内部有一个循环。问题是计数器没有递增,因此循环没有结束。 按照代码:
counter2=1
expect << END_EXPECT
set timeout 60;
spawn ssh user@$1
while {$counter2 < $file_size } {
send "\r";
expect "user@$1>";
send "${xpath[counter2]}";
set counter2 [ expr $counter2 + 1];
send $counter2;
}
send 'quit\r'
END_EXPECT
send $counter2 行告诉我它没有按预期递增。 期望脚本记录一次,发送 n 次 xpath。但发生的是一个无限循环。 应该有什么问题? PS:我用的是 Debian,它是一个 bash 脚本。
解决方法
set counter2 [ expr $counter2 + 1];
-- 因为expect 代码在一个不带引号的heredoc 中,shell 将在启动expect 之前扩展所有 变量。唯一期望看到的是:set counter2 [ expr 0 + 1]
。
即使我们修复了这个问题,您也无法使用 expect 变量来索引 shell 数组。你有一个 shell 解释器运行一个 expect 解释器:这两个进程不能像你想要的那样共享变量。
您必须将 shell 变量放入 expect 可以检索它们的环境中(使用 Tcl env
数组)。不幸的是,数组无法放入环境中。
展示更多该程序的内容,我可以帮助您重构它。