Как обернуть скрипт, порождающий несколько процессов с Expect? - PullRequest
0 голосов
/ 13 июля 2011

Я запускаю "hg fpull", который тянет через ssh. Я хотел бы кормить его только паролем. Да, я знаю о ssh-keygen, но Expect будет для меня более предпочтительным.

Итак, вот сценарий:

#!/usr/bin/expect

stty -echo
send_user "Password: "
expect_user -re "(.*)\n"
set password $expect_out(1,string)
send_user "\n"
stty echo

spawn hg fpull -u --snapfile <snapfile>
expect {
    "Password:" { send "$password\r"; exp_continue; }
}
interact

Проблема в том, что "hg fpull" порождает новый процесс для извлечения из нового репозитория. Новый процесс выводит Expect из цикла ...

Итак, как с этим бороться? Это возможно вообще с Expect? Заранее спасибо!

1 Ответ

3 голосов
/ 19 июля 2011

Если я правильно вас понимаю, вам необходимо получить #spawn_id для вашего порожденного процесса. Затем можно выполнить сопоставление для каждого процесса (ожидаем -i) и закрыть для каждого процесса.

Здесь есть хороший пример: http://wiki.tcl.tk/16158

Я не уверен, что вы подразумеваете под паролем один раз. Применяется ли это для "hg pull" или оно общее.

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

...