Как я могу войти в программу в Linux с помощью скрипта. sh? - PullRequest
1 голос
/ 01 мая 2020

Я уверен, что это где-то переполнение стека, но я искал это часами, и ни один из ответов не сработал.

Мне нужно ответить на запросы в сценарии. sh, чтобы Войдите в разные учетные записи автоматически.

Мой сценарий не будет автоматически отвечать на запросы.

#!/bin/bash

program9000 login

Эта часть работает нормально.

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

Хотите ввести новый ключ?

Я хотел бы ответить y

Как вы хотите аутентифицироваться?
1. введите пароль
2. сделать что-нибудь еще
3. сделать что-нибудь еще
q. Выйти

Я хотел бы ответить 1

Введите пароль, пожалуйста

Я хотел бы ответить mypassword

Введите ваше доменное имя, пожалуйста

Я хотел бы ответить https://mydomain.mine.com

Обратите внимание, что я не пишу подсказки, они приходят из программы 9000. Я просто хочу отвечать одинаковыми 4 ответами каждый раз.

Следующее не сработало в моем. sh script yes echo send

Что должно быть следующим строки моего сценария выглядят так:

Вот некоторые вещи, которые не работают

#!/bin/bash

program9000 login
send "y" 
send "1"
send "fakepassword"
send "https://fakedomain.com"
#!/bin/bash

program9000 login
{ send -- "y" }
{ send -- "1" }
{ send -- "fakepassword"
{ send -- "https://fakedomain.com" }

Ответы [ 3 ]

0 голосов
/ 01 мая 2020

Как уже упоминалось другими, используйте expect.

apt show expect
...
Description: Automates interactive applications
 Expect is a tool for automating interactive applications according to a script.
 Following the script, Expect knows what can be expected from a program and what
 the correct response should be.
 ...

См. Страницу справки ожидайте здесь

Чтобы установить ее в Debian или его производных:

apt install expect 
0 голосов
/ 02 мая 2020

Можно использовать ожидаемо.
Мой английский sh ужасен. Так что я пишу пример.

fakeprogram9000. sh

assert_var()
{
        if [ $1 != $2 ]; then
                echo err; exit 1
        fi
}


read -p 'Would you like to enter a new key?' var1
assert_var $var1 'y'

read -p 'How would you like to authenticate?' var1
assert_var $var1 '1'

read -p 'Enter your password, please' var1
assert_var $var1 'fakepassword'

read -p 'Enter your Domain name, please' var1
assert_var $var1 'https://fakedomain.com'
echo success

пример. sh

#!/bin/bash

expect<<EOF
spawn bash ./fakeprogram9000.sh login
expect "Would you like to enter a new key?" {send "y\r"}
expect "How would you like to authenticate?" {send "1\r"}
expect "Enter your password, please" {send "fakepassword\r"}
expect "Enter your Domain name, please" {send "https://fakedomain.com\r"}
expect eof
EOF
0 голосов
/ 01 мая 2020
  1. Вы можете использовать ожидаемый язык, доступный почти для каждого дистрибутива * nix

  2. Вы можете отправить многострочный "файл ответов" или строку в вашу программу, используя перенаправление

program9000 login <<< "
y
1
fakepassword
https://fakedomain.com"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...