Você sempre pode fazer:
{
printf '<user>\n<pin>'
printf 'Enter the one-time password: ' > /dev/tty
IFS= read -r otp < /dev/tty
printf '%s\n' "$otp"
} | vpn -s connect <domain>
Que solicita a senha depois que vpn
foi iniciado e já foi alimentado com <user>\n<pin>
.
Ele lê a senha e imprime os prompts no dispositivo tty, alternativamente você pode ler de stdin (remover o < /dev/tty
) e imprimir o prompt no stderr (substitua > /dev/tty
por >&2
).
Se estiver usando zsh
em vez de bash
, você pode simplificar isso para:
{
printf '<user>\n<pin>'
IFS= read -rse '?Enter the one-time password: '
} | vpn -s connect <domain>
-
-s
para suprimir o terminalecho
(aquele também suportado porbash
), preferível a senhas de entrada. -
-e
para fazer eco do texto digitado no stdout em vez de armazenar em uma variável -
?prompt
, string de prompt enviada em stderr, mesma sintaxe deksh
.bash
tem uma opção-p
para isso.