Я новичок в ожидании сценариев и пытаюсь заставить работать сценарий ниже. Сценарий входит на сервер и читает файл конфигурации ($ val в сценарии) для значений "cps", а затем представляет общее значение, но застрял при отправке длинной команды "grep", которую я разделил на 2 части. :
set cmd1 "grep -A200 \"_ims\""
set cmd2 { | grep -B3 "calledUserDescriptor" | grep "cps" | grep -v "//cps" | awk '{ SUM += $3} END { print "total sip cps = "SUM}' >> cps.txt}
Исполнение останавливается на:
exp_send "$cmd1 $val $cmd2\r"
здесь выполняется только 1-я часть ($ cmd1 $ val), 2-я часть ($cmd2
) отправляется как отдельная команда и завершается с ошибкой в «|» с сообщением: bash: syntax error near unexpected token |'
Команда grep` работает нормально, если выполняется непосредственно в Linux. Я предполагаю, что есть ошибка (синтаксис?) в строке exp_send, но не выяснили, как это сделать правильно, наверняка есть лучший способ сделать это. Это фактический скрипт:
#!/usr/bin/expect -f
set lnk1 "Traffic_ims.cfg"
set cmd1 "grep -A200 \"_ims\""
set cmd2 { | grep -B3 "calledUserDescriptor" | grep "cps" | grep -v "//cps" | awk '{ SUM += $3} END { print "total sip cps = "SUM}' >> cps.txt}
set file1 "/tmp/cps.txt"
set cmd3 "cd /home/traffic/"
set cmd4 "readlink"
set passwd "xxxxx"
log_user 1
spawn rm -rf $file1
spawn ssh user@192.24.135.166
expect {
-re ".*Are.*.*yes.*no.*" {
send "yes\n"
exp_continue
}
"*?assword:*" {
send $passwd
send "\n"
}
}
expect "*\$ "
exp_send "$cmd3\r"
expect "$cmd3\r"
expect -re $
exp_send "$cmd4 $lnk1\r"
expect "$cmd4 $lnk1\r"
expect -re "(Titan.*)\r"
set val $expect_out(0,string)
exp_send "$cmd1 $val $cmd2\r"
expect -re "(.*)\r"
set output [open "/tmp/cps.txt" "a+"]
set outcome $expect_out(buffer)
send "\r"
puts $output $outcome
close $output
exp_send "exit \r"
exit 0