Баш сценарій, який вводить рядки в команду після її виконання


0

Я хочу зробити сценарій (мовою bash), що дозволяє мені автоматично входити в сервіс X. Сервіс X запитає моє ім’я користувача та пароль, а я хочу, щоб мій сценарій вводив їх. Ось код:

Service X
#input username
#input password

Ось що я повинен зробити вручну:

root@loacalhost~$ Service X  
Service X: Username:  
Service X: Password:  
You have successfully logged in to service X.  
root@loacalhost~$

Ось що я хочу це зробити:

root@loacalhost~$ ./script.sh
You have successfully logged in to service X.
root@loacalhost~$ 

Як я можу це зробити? Я дивився на перенаправлення, STDIN, STDOUT тощо, але я не зміг зрозуміти, як це зробити? Я також дивився на те, echoщоб зробити це, але не пощастило.

Відповіді:


0

Питання неясне, ваша служба X - це таємниця, про це ми нічого не знаємо.

Зазвичай інструменти, які зчитують облікові дані з терміналу, не використовують для цього stdin. Служба може або не може використовувати stdin. Він може надавати можливість читати облікові дані з stdin. Він може надавати можливість для читання облікових даних з файлу.

Примітка: відтепер я буду використовувати servicexяк команду, оскільки Xу вашому Service Xє операнд, тому з параметрами він повинен дивно виглядати Service -a -b --optionc X. Сумніваюся, такий синтаксис був вашим наміром.

Якщо servicexза замовчуванням читається облікові дані з stdin, це має працювати:

printf '%s\n' "your username" "your password" | servicex

Якщо він читає облікові дані stdin лише тоді, коли йому це зробити, щось на зразок:

printf '%s\n' "your username" "your password" | servicex --credentials-from-stdin

В обох випадках може бути краще прочитати облікові дані з файлу, який не може прочитати жоден інший користувач:

<secret_file servicex --credentials-from-stdin

Або сервіс може надавати можливість зчитувати облікові дані з файлу (залишаючи stdin з іншою метою або невикористаним):

servicex --credentials-from-file secret_file

Але, швидше за все, сервіс безпосередньо використовує термінальний пристрій для запиту облікових даних та їх читання. У цьому випадку expectправильний інструмент. Порівняйте цю відповідь мою чи цю . Неясним ескізом рішення вашої неясної проблеми може бути:

expect -c '
 log_user 0
 spawn servicex
 expect "Service X: Username:"
 send "your username\n"
 expect "Service X: Password:"
 send "your password\n"
 interact
'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.