Назад | Перейти на главную страницу

экран, ожидание и автономное взаимодействие по сценарию

Попытка написать сценарий bash, который будет открывать экран, запускать приложение на Python и взаимодействовать с взаимодействием с Python по мере необходимости при его первом запуске.

Если это невозможно на экране, я был бы рад переключиться на tmux в качестве альтернативы. Я просто не очень хорош в написании сценариев на bash и не имею опыта работы с expect.

Вот что у меня есть на данный момент:

sent=blah
expexec=$(/usr/bin/expect -c "/usr/bin/python /opt/app.py expect \"Interaction:\" send \"$sent\r\" interact")
/usr/bin/screen -L -dmS spawner /bin/sleep 30
/bin/sleep 1
/usr/bin/screen -S spawner -X screen screen -L -dR myDaemon
/bin/sleep 1
/usr/bin/screen -S myDaemon -X detach
/usr/bin/screen -S myDaemon -X stuff "echo $expexec"
/usr/bin/screen -S spawner -X stuff "exit\r"

Надеюсь, кто-нибудь сможет мне помочь ...

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

Заранее спасибо,

JG

На всякий случай, если это поможет кому-то другому, я подумал, что расскажу всем, как у меня это работает. Я просто разделил свой один сценарий на два с ожидаемой частью в отдельном сценарии. В моей версии используется только одна переменная, но я думаю, ее легко масштабировать.

ожидать скрипт:

#!/usr/bin/expect
set timeout 60

set sent [lindex $argv 0]

spawn /usr/bin/python /opt/app.py

expect "Interaction:"

send "$sent\r";

interact

основной сценарий:

#!/bin/sh

# variables
sent=blah
expectScript=/path/to/expect/script

# bash screen detachment foo
/usr/bin/screen -L -dmS spawner /bin/sleep 30
/bin/sleep 1
/usr/bin/screen -S spawner -X screen screen -L -dR myDaemon
/bin/sleep 1
/usr/bin/screen -S myDaemon -X detach

# sending the command to the screen
/usr/bin/screen -S myDaemon -X stuff "$expectScript $sent\r"

# close the screen spawner
/usr/bin/screen -S spawner -X stuff "exit\r"

JG