Одна идея состоит в том, чтобы запустить процесс в фоновом режиме, перенаправляя его stdout (stderr?) в файл, а ваш сценарий должен ждать и контролировать этот файл в цикле. Всякий раз, когда процесс печатает приглашение пароля, скрипт передает пароль в процесс через его stdin.
Достижение этого на самом деле сложно. Вы можете использовать два сценария, один для мониторинга вывода и подачи паролей, а другой для их запуска сначала, применяя необходимые переадресации.
Таким образом, сценарий запуска:
#!/bin/bash
TEMP_FILE=/tmp/hapboon.stdout
start-dfs.sh <(./feed-passwords.py "$TEMP_FILE") > "$TEMP_FILE"
По какой-то причине я буду использовать Python для другого:
#!/usr/bin/python3
PASSWORD="""TYPE_YOUR_PASSWORD_HERE"""
from sys import argv
temp_file = argv[1] # Raises exception if argument is missing
counter = 0
maximum = 3
previous_length = 0
while True:
with open(temp_file) as f:
output = f.read()
if len(output) == previous_length:
continue
previous_length = len(output)
last_line = output.strip().split('\n')[-1]
if last_line.endswith(' password:'):
print(PASSWORD) # Our stdout goes to `start-dfs.sh`
counter += 1
if counter == maximum:
break
Я ничего не тестировал. Одно из предположений, на которое основан этот подход, заключается в том, что тот, кто получает пароль через свой stdin, сам start-dfs.sh, который имеет довольно хорошую возможность быть неверным. Стартовые скрипты часто просто вызывают другие процессы, поэтому пароль, вероятно, нужно отправить в stdin других процессов.
Возможно, вам придется поработать с самим скриптом start-dfs.sh и перенаправить его на stdin процессы, которые получат пароль. Это также означает, что наш скрипт feed-passwords.py должен каждый раз печатать пароли в соответствующий файл, что, вероятно, означает, что архитектура всего подхода изменится.
Кроме того, пока мы еще не находимся, еще одна вещь об этом скрипте, который является негибким; он работает только с заданным количеством паролей (определяется переменной maximum). Возможно, было бы желательно изменить его таким образом, чтобы он продолжал следить за запросами пароля до тех пор, пока не пройдет определенный тайм-аут (скажем, 15 секунд), поэтому он вмещает любое количество приглашений пароля без необходимости менять номер каждый раз. (Я могу помочь вам в этом, если это необходимо.)
Другое примечание. Если вы не хотите хранить свой пароль, просто замените строку PASSWORD=... на: PASSWORD=input("Type your password: "). Это позволит вам вводить пароль только один раз при каждом запуске скрипта и не будет хранить ваш пароль нигде.
Я думаю, что эта страница решает мою проблему, в частности шаги 1-6 в разделе «Процедуры».
Я думаю, что эта страница решает мою проблему, в частности шаги 1-6 в разделе «Процедуры».
Я думаю, что эта страница решает мою проблему, в частности шаги 1-6 в разделе «Процедуры».
Я думаю, что эта страница решает мою проблему, в частности шаги 1-6 в разделе «Процедуры».
Я думаю, что эта страница решает мою проблему, в частности шаги 1-6 в разделе «Процедуры».
Я думаю, что эта страница решает мою проблему, в частности шаги 1-6 в разделе «Процедуры».
Я думаю, что эта страница решает мою проблему, в частности шаги 1-6 в разделе «Процедуры».