Fornecer entrada para um programa com um prompt de senha

1

Existe algum comando do Linux que fornece várias chaves de entrada para outro processo que está sendo executado em um terminal até que o outro processo morra?

Por exemplo, considere o comando yes ' ' | ./ssr-sim prepare . Eu preciso de um comando no lado LHS do pipe ( | ). Por exemplo, em vez de yes ' ' à esquerda de | , outro comando que fornece várias chaves de entrada para o ./ssr-sim prepare no lado direito.

Eu queria automatizar a inserção de chaves dentro de um shell script e o comando ./ssr-sim prepare produzia a saída que pede senha várias vezes e o usuário precisa pressionar manualmente a tecla Enter todas as vezes (sem precisa dar a senha aqui, apenas pressione Enter toda vez que for solicitada a senha). Preciso automatizar esse pressionamento de inserir parte da chave.
O comando yes ' ' | ./ssr-sim prepare não está funcionando.

    
por Subi Suresh 21.03.2014 / 07:24

2 respostas

1

Se echo ing ou yes ing input para um programa interativo não é suficiente para enganá-lo, geralmente é porque ele tenta ser inteligente e verifica se sua entrada é realmente um terminal ou um pipe. Para isso, você precisa de um martelo maior; o que as pessoas costumam usar é espera , que foi escrito para contornar esse problema.

    
por 21.03.2014 / 09:52
0
printf \n%.0b 'seq 1 ${NUMBER OF TIMES YOU WANT}' | $CMD

Se o seu $CMD não gostar do canal, tente:

printf 'PRESS CTRL+V then ENTER TWICE\n' >&2 ; read -r ENTER

$CMD <<YESALREADY
    $(printf "$ENTER\n%.0b" 'seq 1 ${NUMBER OF TIMES YOU WANT}')
YESALREADY

Se isso não funcionar, você deve procurar uma solução como o expect já mencionado, ou um pty . Por exemplo, zsh tem um builtin zpty módulo.

    
por 21.03.2014 / 08:35