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 - Błąd

Zaczęty przez lukas60055, Kwiecień 19, 2017, 03:25:59 PM

Poprzedni wątek - Następny wątek

lukas60055

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.

lesio

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)

lesio

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

Zobacz najnowsze wiadomości na forum