сценарий «ожидаем» - как разбить вывод команды на несколько переменных - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь настроить сценарий ожидания, который входит в систему на удаленном сервере и выбирает 3 последних созданных файла журнала.Вывод (1 строка) выглядит следующим образом:

root@server1:/cluster/storage/var/log/alarms$ 
Last 3 created files are:  FmAlarmLog_20180515_1.log FmAlarmLog_20180516_2.log FmAlarmLog_20180517_3.log

Как я могу разделить этот вывод и создать 3 разных переменных (по одной для каждого файла журнала) из этого вывода?Имя файла журнала всегда начинается с "FmAlarmLog_"

Мне нужно добавить позже часть, обрабатывающую извлечение этих файлов.

#!/usr/bin/expect -f

set passwd "xxx"
set cmd1  "ls -ltr | tail -3 | awk '{print \$NF}'"
set dir "/cluster/storage/var/log/alarms"
set timeout 1
set prompt1 "*\$ "
log_user 0
spawn ssh admin@10.30.35.36
expect {
-re ".*Are.*.*yes.*no.*" {
send "yes\n"
exp_continue
}
"*?assword:*" {
send $passwd
send "\n"
}
}

expect  $prompt1  { send "cd $dir\r"}
expect  $prompt1  { send "$cmd1\r"}

set Last3LogFiles {}

expect \n
expect {

-re {^([^\r\n]*)\r\n} { 

    lappend Last3LogFiles $expect_out(1,string)
    exp_continue
 }
  -ex $prompt1
}

send_user "Last 3 created files are: $Last3LogFiles\n"

send "exit\n"
exit 0

1 Ответ

0 голосов
/ 31 мая 2018

Попробуйте это:

expect  $prompt1  
send "$cmd1\r"

# express the prompt as a regular expression. 
# best practice is to match the prompt at the end of the current input,
# I don't know if you have a space at the end of your prompt

expect -re {(.*)\r\n\$ ?$}

# command output is in $expect_out(1,string)

set Last3LogFiles [regexp -inline -all {FmAlarmLog_\S+} $expect_out(1,string)] 
...