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>
-
-spara suprimir o terminalecho(aquele também suportado porbash), preferível a senhas de entrada. -
-epara 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.bashtem uma opção-ppara isso.