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

Autor Wątek: Expect linux - Błąd  (Przeczytany 557 razy)

Offline lukas60055

  • Newbie
  • *
  • Wiadomości: 5
Expect linux - Błąd
« dnia: Kwiecień 19, 2017, 03:25:59 pm »
Witam, robię sobie "domowe powiadomienia" i do tego używam programu expect. Tylko jest problem bo ciągle mi błąd wyskakuje.
Taki mam napisany skrypt:
(Nazwa skryptu: xxx.exp)

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

while {1} {
expect " 123456"
exec /home/lukas60055/Pulpit/Skrypt/skrypt1
}

Chodzi tu o to ze jak w programie multimon-ng wyskoczy ciąg liczb 123456 to uruchomi mi skrypt1

Odpalam skrypt xxx.exp odpala mi nie multimon-ng i jak na razie wszystko działa i jak się pokażą liczby 123456 to wyskakuje błąd w konsoli.

Błąd w konsoli:

Error opening device, it doesn't exist.
child process exited abnormally
while executing
"exec /home/lukas60055/Pulpit/Skrypt/skrypt1"
("while" body line 3)
invoked from within
"while {1} {
expect "123456"
exec /home/lukas60055/Pulpit/Skrypt/skrypt1
}"
(file "./xxx.exp" line 5)

Prosił bym o pomoc lub wytłumaczeniu co tu jest nie tak.

Offline lesio

  • Hero Member
  • *****
  • Wiadomości: 543
Odp: Expect linux - Błąd
« Odpowiedź #1 dnia: Kwiecień 19, 2017, 05:18:58 pm »
Wygląda, że coś nie tak jest w linii wywołania pliku albo z wywoływanym plikiem.
Problemem jest chyba wykorzystanie polecenia shella (exec) w ramach skryptu expect. Polecenie shella (lub wywołanie skryptu shella) jest najwyraźniej niezrozumiałe dla expecta. Poza tym polecenie exec powoduje wywołanie skryptu (gdyby jakimś cudem się to udało) w bieżącej powłoce, w związku z czym pętla "while" nie będzie się wykonywać, bo zostanie "zastąpiona" (przerwana, zakończona) poleceniem "exec". Myślę, że rozwiązaniem jest ostatni wpis (a właściwie propozycja struktury programu) na tej stronie (chociaż oczywiście warto przejrzeć całość):
http://stackoverflow.com/questions/4780893/use-expect-in-bash-script-to-provide-password-to-ssh-command
W tym kontekście pętlę trzeba by było nałożyć oczywiście w ramach shella (basha), a nie expecta (czyli wowołanie expecta wraz z poleceniem spawn byłoby wielokrotne w ramach pętli shella)

Offline lesio

  • Hero Member
  • *****
  • Wiadomości: 543
Odp: Expect linux - Błąd
« Odpowiedź #2 dnia: Kwiecień 19, 2017, 06:32:59 pm »
Drugie rozwiązanie - bez konieczności wykorzystywania basha, pozwala uruchomić program/skrypt ze skryptu expect przy wykorzystaniu polecenia send i interact:
http://stackoverflow.com/questions/21803337/using-two-interact-in-a-expect-script