Nie wiem co się dzieje, ale nie otrzymuję kompletnego wyniku z wykonanego polecenia zdalnego prawdopodobnie dlatego, że oczekuje się, że bufor wewnętrzny zostanie wykonany.Jak uzyskać pełne dane wyjściowe, gdy rozmiar bufora wewnętrznego przekroczył oczekiwany rozmiar (bufor)?
proc SendCommands { Commands } {
global prompt log errlog
foreach element [split $Commands ";"] {
expect {
-re $prompt
{send -- "$element\r"}
}
set outcome "$expect_out(buffer)"
foreach line [split $outcome \n] {
foreach word [regexp -all -inline {\S+} $line] {
if {([string index [string trimleft $line " "] 0 ] == "%")} {
puts "$outcome"
exit 1
}
}
}
puts "$outcome"
}
}
set timeout 30
foreach host [ split $hosts "\;" ] {
spawn ssh -o "StrictHostKeyChecking no" "[email protected]$host"
match_max 10000000
expect {
timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
eof { send_user "\nSSH failure for $host\n"; exit 1 }
"*?assword:*"
{
send -- "$password\r"
}
}
expect {
timeout { send_user "\nLogin incorrect\n"; exit 1 }
eof { send_user "\nSSH failure for $host\n"; exit 1 }
-re "$prompt"
{ send -- "\r" }
}
set timeout 300
SendCommands "$Commands"
}
to jak mam je wykonuje:
./sendcommand aehj SWEs-elmPCI-B-01.tellus comnet1 "terminal length 0;show int description" "(.*#)$"
Dostaję pełną moc tylko wtedy, gdy usunę log user 0
ale kiedy używam stawia polecenie w sendcommands fucnction wyżej i uzyskać około 90 procent o 10 procentach końcowych danych na końcu nie jest pokazane.
w jedną stronę myślę, że należy użyć negacji regex w spodziewać, ale nie wydaje się działać.
expect {
-re ! $prompt
{puts $expect_outcome(buffer)}
}
EDIT: mam wszystkie dane wyjściowe raz, gdy jej wykonywany około 5 lub 7 razy