计数器循环不会在 expect

问题描述

我正在尝试运行此脚本,其中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 数组)。不幸的是,数组无法放入环境中。

展示更多该程序的内容,我可以帮助您重构它。