Precisa redirecionar entrada de um arquivo e também do tty

2

Estou executando o Amanda para meus backups. Eu preciso restaurar um monte de arquivos de datas diferentes. Os arquivos têm o mesmo nome, portanto, preciso fazer várias sessões de restauração. Então, eu pensei em escrever o roteiro. Aqui está meu script:

sethost myhost
setdisk /var
setdate 2017-03-25-01-30-01
cd log/httpd
ls
add ssl_request_log
extract

Eu corro o script usando o redirecionamento de shell:

amrecover my_Config < /home/me/thatScript

O problema é que, assim que o amrecover vê o comando extract , ele me pede para confirmar.

Continue? [Y/n]:

Colocar "Y" na linha depois de "extrair" não funciona. Amrecover senta lá e espera que eu digite "Y". Eu imagino que amrecover está querendo a entrada do tty e não apenas do stdin.

Eu olhei para a página man para recuperar e também eu tenho google para ver se alguém descobriu isso. E o código é compilado, então não posso hackear um script para não esperar pela confirmação.

Existe uma maneira de obter entrada de um script e redirecionar / dev / tty para stdin?

    
por Sol 21.05.2017 / 02:45

2 respostas

3

amrecover pretende ser um script interativo, então, tradicionalmente para automatizá-lo, você pode usar expect . Esse utilitário tcl pode ser feito para verificar a conversação dos dois estilos de prompt ( amrecover> e Continue? [Y/n]: ) e responder a eles de maneira diferente. Por exemplo, crie um arquivo myrecover no seu PATH, torne-o executável ( chmod +x myrecover ) e coloque o seguinte:

#!/usr/bin/expect
spawn amrecover my_Config 
expect   -ex {Continue? [Y/n]:}  { send "y\r"; exp_continue } \
         -ex {amrecover>}        { gets stdin input; 
               if ![eof stdin] { send $input; send "\r"; exp_continue } }
close
wait

Em seguida, execute-o como

./myrecover </home/me/thatScript

O script expect bifurca e executa seu comando amrecover my_Config , conectando-se a ele por meio de um arquivo e, em seguida, escutando a entrada procurando os dois prompts. Quando o prompt usual amrecover> é visto, lemos uma linha do stdin do script expect , ou seja, o seu conjunto de comandos e (se não tivermos o final do arquivo) enviamos essa linha para o programa, com uma nova linha ( \r é convertido para isso). O exp_continue faz o loop de comando novamente para a próxima correspondência de prompt. No fim do arquivo, fechamos a conexão com o programa e esperamos que ele saia.

Tenha em atenção que executar amanda desta forma pode causar estragos se o pedido continuar for para alguma condição excepcional, etc.

    
por 21.05.2017 / 19:12
0

Forneça a entrada para o utilitário extract por meio do heredoc , conforme mostrado:

extract - <<\__DATA__
Y
__DATA__
    
por 21.05.2017 / 04:05