我正在尝试运行这个脚本,在这里有一个循环内的期望。问题是计数器没有递增,因此循环没有结束。请遵循下列程式码:
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脚本。
2条答案
按热度按时间mbjcgjjk1#
set counter2 [ expr $counter2 + 1];
--因为expect代码在一个没有引号的heredoc中,shell将在 * 启动expect之前展开 * 所有 * 变量 *。唯一期待看到的是:set counter2 [ expr 0 + 1]
的值。即使我们修复了这个问题,你也不能用expect变量来索引shell数组。你有一个shell解释器运行一个expect解释器:这两个进程不能像你想要的那样共享变量。
您必须将shell变量放到expect可以检索它们的环境中(使用Tcl
env
数组)。遗憾的是,无法将阵列放入环境中。再多展示一些这个程序,我可以帮助你重构它。
xqk2d5yq2#
代码中的这行
set counter2 [ expr $counter2 + 1];
,导致变量counter2
在expect上下文中,而不是在bash上下文中。您的代码在bash中使用了expect,因此您需要使用\$counter2
来引用变量,而不是$counter2
。我的test.sh代码在这里:字符串
我的/root/sample. txt在这里:
型
下面是test.sh的输出:
型
提高手术成功率。
我是从expect set variable in bash context学的。