linux - 计数器循环不会在期望内递增
问题描述
我正在尝试运行这个脚本,其中期望里面有一个循环。问题是计数器没有增加,所以循环没有结束。按照代码:
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]
即使我们解决了这个问题,您也无法使用期望变量来索引 shell 数组。你有一个运行期望解释器的 shell 解释器:这两个进程不能像你想要的那样共享变量。
您必须将 shell 变量放入期望可以检索它们的环境中(使用 Tclenv
数组)。不幸的是,数组不能放入环境中。
再展示一些那个程序,我可以帮你重构它。
推荐阅读
- php - PHP Cookies 不显示?
- python - 如何清理解析输出?
- php - 拆分此字符串值的最佳方法是什么?
- mysql - 对一个表求和并用结果更新另一个表,或者只是在选择时执行“求和”?
- json - 使用 kotlinx.serialization 在 ktor 服务器中接收 Map
- python - 检查列表中元素的后缀
- java - @ManyToMany 重复条目
- c# - 尝试创建 Pastebin 时我的 GUI 冻结
- javascript - 如何在不重新加载页面的情况下提交带有两个 HTML 按钮的表单?
- java - Android:无法访问 android.os.AsyncTask.WorkRunnable