Como capturar a saída padrão de um script que depende do usuário para alguma entrada?

1

Existe um script que requer que eu digite a senha antes de continuar:

bash-3.2$ ./script.sh <parameter_list>
Enter the password for the Database: 
..
..

Estou interessado em capturar a saída padrão do script em um arquivo de log, enquanto segura a senha para o script.

Eu tentei passar a senha para a entrada padrão da seguinte forma:

bash-3.2$ echo "<password>" > /secure/path/password.txt
bash-3.2$ ./script.sh <parameter_list> < /secure/path/password.txt

Mas isso não parece funcionar. Se isso acontecesse, eu poderia simplesmente usar tee para redirecionar a saída para um arquivo de log.

Alguém poderia me indicar a direção certa?

    
por Kent Pawar 01.07.2013 / 16:36

3 respostas

3

Eu acho que você quer expect . Essa ferramenta pode trabalhar interativamente com comandos que precisam de entrada do usuário. Claro que a grande armadilha é que você tem que saber o que espera .

Exemplo (emprestado de link )

#!/usr/bin/expect

set timeout 20

spawn "./hello.pl"

expect "hello"
send "no match : <$expect_out(buffer)> \n"
send "match :  <$expect_out(0,string)>\n"

interact
    
por 01.07.2013 / 22:32
1

E sobre

echo "password" | ./script.sh parameter_list ... > output.file

Se isso não funcionar, responda a esta pergunta: que mecanismo o script usa para obter a senha do usuário? Se é algo como uma senha ssh, enviá-la via stdin não funcionará.

    
por 01.07.2013 / 16:52
0

Se este é seu próprio script, você pode enviar a saída interativa para stderr .

    
por 01.07.2013 / 16:52