期望脚本中的foreach循环不接受变量

时间:2013-04-24 16:01:12

标签: foreach tcl expect

#!/bin/bash
expect << EOF
exp_internal 1

spawn ssh nbhambha@10.118.137.78
expect "ssword:"
send "********\r"
sleep 3
set list [open list1 r]

foreach line \$list 
{
   expect " $"
   send "seeisso \$list | grep -E -i ' os |proddropdown|hostname'"
   send "\r"
   sleep 5
   expect -re " $"
   set fid [open out1.txt a]
   puts \$fid \$expect_out(buffer)
}
close $fid

EOF

==

清单1包含:

APSE0112

ETLLT0000

=============

脚本的结果:

expect: does " " (spawn_id exp6) match glob pattern " $"? yes
expect: set expect_out(0,string) " "
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) " "
send: sending "seeisso file7 | grep -E -i ' os |proddropdown|hostname'" to { exp6 }
send: sending "\r" to { exp6 }

expect: does "" (spawn_id exp6) match regular expression " $"? no


expect: does "\r\n" (spawn_id exp6) match regular expression " $"? no
seeisso file7 | grep -E -i ' os |proddropdown|hostname'

expect: does "\r\nseeisso file7 | grep -E -i ' os |proddropdown|hostname'\r\n" (spawn_id exp6) match regular expression " $"? no

===================

我不知道从哪里获取file7值。 当我改变时:

send "seeisso \$list | grep -E -i ' os |proddropdown|hostname'"

send "seeisso **$list** | grep -E -i ' os |proddropdown|hostname'"

它需要一个空值:

expect: set expect_out(0,string) " "
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) " "

send: sending "seeisso  | grep -E -i ' os |proddropdown|hostname'" to { exp6 }
send: sending "\r" to { exp6 }

expect: does "" (spawn_id exp6) match regular expression " $"? no


expect: does "\r\n" (spawn_id exp6) match regular expression " $"? no
seeisso  | grep -E -i ' os |proddropdown|hostname'

===========

请帮忙

1 个答案:

答案 0 :(得分:2)

我看到了几个问题:

    在您的情况下,
  1. list实际上是文件句柄,而不是文件的内容。
  2. 您在$list之前有反斜杠,我不明白原因
  3. 您不使用line变量
  4. 以下建议是否有效:

    set fileHandle [open list1]
    while {[gets $fileHandle line] != -1} {
        expect " $"
        send "seeisso $line | grep -E -i ' os |proddropdown|hostname'"
        send "\r"
        # the rest ...
    }
    close $fileHandle