Как избежать сопоставления с данными, отправляемыми в порожденный процесс - PullRequest
0 голосов
/ 17 октября 2011

В моем ожидаемом сценарии следующий пример кода доставляет мне много хлопот

#!/usr/bin/expect
#some other code
set psucommand "psu |grep -v grep | grep $jobname\r"
#some other code
expect "env[lindex $argv 0]>" {send $psucommand}
expect {
"$jobname" {
        send_user "$jobname"
        send "exit\r"}
"env[lindex $argv 0]>" {
        send_user ""
        send "exit\r"}
}

Это второе ожидание пытается (успешно) соответствовать действительной команде $ psucommand (psu | grep -v grep |grep ACTUALJOBNAME \ r) Я отправляю в порожденный процесс, и мне нужно сопоставить только вывод порожденного процесса.

Вот что я вижу в конце, когда я запускаю этот скрипт с ожидаемым -d

expect: does " psu |grep -v grep | grep ACTUALJOBNAME\r\n" (spawn_id exp6) match glob pattern "ACTUALJOBNAME"? yes

Это соответствует моей команде, которую я отправил в порожденный процесс.Мне нужно этого избегать.

Помощь!

1 Ответ

2 голосов
/ 17 октября 2011
set psucommand [format {psu | grep [%s]%s} \
                   [string index $jobname 0] \
                   [string range $jobname 1 end]]

В результате psucommand будет psu | grep [A]CTUALJOBNAME

Итак, вам нужно send "$psucommand\r", но ожидание $ jobname не должно забирать команду.

...