首页 > 解决方案 > 计数器循环不会在期望内递增

问题描述

我正在尝试运行这个脚本,其中期望里面有一个循环。问题是计数器没有增加,所以循环没有结束。按照代码:

        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 脚本。

标签: linuxloopswhile-loopdebianexpect

解决方案


set counter2 [ expr $counter2 + 1];-- 因为expect 代码在一个未引用的heredoc 中,shell 将在启动expect之前扩展所有变量。唯一期望看到的是:.set counter2 [ expr 0 + 1]

即使我们解决了这个问题,您也无法使用期望变量来索引 shell 数组。你有一个运行期望解释器的 shell 解释器:这两个进程不能像你想要的那样共享变量。

您必须将 shell 变量放入期望可以检索它们的环境中(使用 Tclenv数组)。不幸的是,数组不能放入环境中。

再展示一些那个程序,我可以帮你重构它。


推荐阅读