#!/bin/bash
expect << EOF
exp_internal 1
spawn ssh [email protected]
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'
===========
Помогите
Почему у вас есть обратная косая черта перед '$ list' (т.е.' \ $ list')? Кроме того, я не вижу использования переменной 'line'. –
В bash here-doc, если вы одинажите кавычек терминатора here-doc, вы фактически одинажите кавычки всего этого. Это облегчило бы большую часть вашего побега. Тем не менее, весь сценарий bash является ожидаемой программой. Уйти с bash вообще. Измените строку she-bang на: '#!/Usr/bin/expect -f'. –
Ошибка Tcl: команды заканчиваются точками с запятой и символами новой строки, поэтому вы должны * поместить открывающую фигуру на ту же * линию, что и команда foreach. –