Все,
РЕДАКТИРОВАТЬ
Я хочу выполнить оператор unix в сценарии Expect и получить результат без необходимости включать оператор взаимодействия. Оператор unix выводит значение rsize для процесса. Раньше я не программировал на Expect. Это мой код:
#!/usr/bin/expect
set some_host "some host"
set Mycmd "top -l 1 -stats pid,rsize,command | grep Process_Name| awk '{print \$2};'"
spawn telnet localhost $some_host
expect "login:"
send "myDevice\r"
expect "Password:"
send "$password\r"
expect "\$"
send "$Mycmd\r"
interact
Если я не включу оператор взаимодействия, я не получу никаких результатов. Как мне заставить это работать, чтобы на выходе я получал правильное значение rsize?
Почему бы просто не использовать вывод ps
?
$ ps -p <pid> -o rss | egrep '[0-9]'
Удаленно вы можете сделать это через ssh:
$ ssh user@host ps -p <pid> -o rss | egrep '[0-9]'
Вы можете использовать любой из этих методов, каждый из которых дает несколько разные результаты.
expect -re "*\n"
expect
expect "%"
Вы также должны посмотреть на значение match_max
который определяет, сколько будет совпадений.
после того, как результаты будут пойманы, вы захотите посмотреть результаты
puts "$expect_out(buffer)"
видеть http://en.wikipedia.org/wiki/Expect для отличных примеров.