#tcl #expect
#tcl #ожидать
Вопрос:
Я хотел бы сделать что-то вроде
systemd-ask-password --keyname=domain:pw --accept-cached Password:
от Expect. Эта команда отлично работает с терминала, чтобы либо вернуть кэшированный пароль, если он уже существует, либо запросить его, а затем кэшировать его. Однако мне не удалось найти способ заставить его взаимодействовать expect
.
send "systemd-ask-password --keyname=domain:pw --accept-cached Password:r"
не создает выходных данных для взаимодействия и
spawn "systemd-ask-password --keyname=domain:pw --accept-cached Password:r"
говорит ": no such file or directory...
, что подразумевает, что порожденный процесс даже не использует ту же связку ключей.
Я был бы счастлив использовать более низкий уровень keyctl
, но у меня те же результаты, что и с этим
Какой правильный синтаксис для создания systemd-ask-password
или keyctl
запроса в tty?
Ответ №1:
Я думаю, вы имеете в виду запустить команду, используя tty, в котором вы находитесь в данный момент. Это можно сделать с помощью exec
. Например, следующее взаимодействие с оболочкой ( ****
где я ввел none
):
$ cat <<! >myprog
set pw [exec systemd-ask-password --keyname=domain:pw --accept-cached Password:]
send_user "you said pw=$pwn"
!
$ expect myprog
Password: ****
you said pw=none
$ expect myprog
you said pw=none
Комментарии:
1. Это абсолютно идеально. Я раньше не видел
set variable [...]
синтаксиса.
Ответ №2:
Если бы я должен был сделать это как отдельную вещь для запуска в качестве порожденного подпроцесса, я бы ожидал его запуска с чем-то вроде этого:
spawn systemd-ask-password --keyname=domain:pw --accept-cached Password:
Единственная причина для send
изменения этого была бы в том, что есть управляемая оболочка, которой мы хотим, чтобы она выполняла это для нас (возможно, потому, что она будет запущена на удаленном компьютере).).
Вероятно, потребуется автоматизировать обработку возможного запроса пароля и управление результатом. Конечно. Но для тестирования введите interact
команду после этого spawn
, чтобы вы могли напрямую обращаться к подпроцессу (как если бы он был).
Комментарии:
1. Как я уже сказал, я использовал
spawn
. Кажется, он даже не смотрит в нужную связку ключей, но, тем не менее, он также не запрашивал.