linux 计数器循环在expect内不递增

sq1bmfud  于 2023-08-03  发布在  Linux
关注(0)|答案(2)|浏览(145)

我正在尝试运行这个脚本,在这里有一个循环内的期望。问题是计数器没有递增,因此循环没有结束。请遵循下列程式码:

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

mbjcgjjk

mbjcgjjk1#

set counter2 [ expr $counter2 + 1];--因为expect代码在一个没有引号的heredoc中,shell将在 * 启动expect之前展开 * 所有 * 变量 *。唯一期待看到的是:set counter2 [ expr 0 + 1]的值。
即使我们修复了这个问题,你也不能用expect变量来索引shell数组。你有一个shell解释器运行一个expect解释器:这两个进程不能像你想要的那样共享变量。
您必须将shell变量放到expect可以检索它们的环境中(使用Tcl env数组)。遗憾的是,无法将阵列放入环境中。
再多展示一些这个程序,我可以帮助你重构它。

xqk2d5yq

xqk2d5yq2#

代码中的这行set counter2 [ expr $counter2 + 1];,导致变量counter2在expect上下文中,而不是在bash上下文中。您的代码在bash中使用了expect,因此您需要使用\$counter2来引用变量,而不是$counter2。我的test.sh代码在这里:

#!/bin/bash

out_para=1

expect <<EOF
set out_para_cp $out_para
spawn cat /root/sample.txt
expect {
"test" {
send "\$out_para_cp\r";
set out_para_cp [ expr \$out_para_cp + 1 ];
exp_continue
}
EOF

字符串
我的/root/sample. txt在这里:

test
test


下面是test.sh的输出:

~ $ sh test.sh
spawn cat /root/sample.txt
test
test
1
2


提高手术成功率。
我是从expect set variable in bash context学的。

相关问题