Linuxiarze.pl Forum

Dystrybucje Linux => Ubuntu, Kubuntu, Xubuntu, Lubuntu => Wątek zaczęty przez: lukas60055 w Kwiecień 19, 2017, 03:25:59 PM

Tytuł: Expect linux - Błąd
Wiadomość wysłana przez: lukas60055 w 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.
Tytuł: Odp: Expect linux - Błąd
Wiadomość wysłana przez: lesio w 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)
Tytuł: Odp: Expect linux - Błąd
Wiadomość wysłana przez: lesio w 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