Witaj na Forum Linuxiarzy
Zanim zalogujesz się, by pisać na naszym forum, zapoznaj się z kilkoma zasadami savoir-vivre'u w dziale Administracja.
Wiadomości z problemami zamieszczone w wątku "Przywitaj się" oraz wszelkie reklamy na naszym forum będą usuwane.

Expect linux - Nowy problem

Zaczęty przez lukas60055, Kwiecień 21, 2017, 12:47:36 PM

Poprzedni wątek - Następny wątek

lukas60055

Mam nowy problem tam to już naprawiłem. Chodzi mi tu o to ze jak mam taki kod:

#!/usr/bin/expect
set timeout -1
spawn multimon-ng -c -a STQC

while {1} {
expect "123456"
exec ./skrypt1

expect "7890"
exec ./skrypt2
}

I wszystko pięknie gra tylko ze działa to tak:
Pokazują się liczby 123456 ok włącza się skrypt1
Pokazują się liczby 7890 też włącza się skrypt2
i tak w kółko

I chodzi tu o to ze jak pierwsze pokażą się liczby "7890" to skrypt2 się nie uruchamia, albo dwa razy "123456" to raz się uruchomi skrypt1 drugi raz nie trzeba potem liczby "7890". Działa to tak jakby z góry na dół i tak w kółko.

Naprawdę prosił bym o pomoc bo tylko to i już mi wszystko będzie działać.

lesio

Najpierw napisz, jak usunąłeś błędy poprzednim razem. Warto wiedzieć, gdzie był błąd, bo obawiam się, że expect zachowuje się nieco odmiennie w różnych systemach. Jaki to jest system?

lukas60055

Jest to Linux Ubuntu

Naprawiłem to tak że usunąłem argument -f i spacje dodałem jak masz while {1} {

Teraz nie wiem jak zrobic zeby nie działało to od góry na dół tylko taki kod sie pojawia to dany skrypt ma uruchomic

lesio

W każdej pętli wszystko wykonuje się sekwencyjnie, w związku z tym najpierw pierwszy expect oczekuje na "123456" i gdy taki ciąg się pojawi, to wykonuje skrypt1 i teraz kolejny expect oczekuje na ciąg "789" by wykonać skrypt2, po czym wszystko zaczyna się od początku. Aby to działało tak jak chcesz, musiałbyś użyć jednego expecta z dwoma argumentami i następnie analizować, co uruchomić.

lukas60055

A mógłbyś mi pokazać jak ? Jakiś przykład wzór ?

lesio

Niestety, expecta używałem bardzo dawno temu (będzie z 20 lat)  w unixie i niewiele pamiętam, natomiast korzystając z manuala - czyli polecenia:
$ man expect
wynika, że dla polecenia expect można podać kilka wzorców. Być może w jakiejś zmiennej środowiskowej jest przechowywany wzorzec, który "załapał" i wtedy w skrypcie można na jego podstawie podjąć jedno lub drugie działanie. Tak więc pozostaje ci polecenie "man" w linuksie i google w przeglądarce ... Na szczęście materiałów w necie jest dużo, tylko trzeba umieć znaleźć ...

Zobacz najnowsze wiadomości na forum