shell scripts que respondem à saída do console

3

Disclaimer :: Eu não sou um shell script ativo

Como se cria um script que responde à saída do console? Por exemplo, estou tentando configurar um cron que periodicamente altera o svnsync para o meu repositório para um servidor de backup a cada meia-noite. O problema é que, para sincronizar, ele solicita credenciais de autorização.

O svnsync sync não aceita opções para especificar um login, portanto, um simples comando cron está desativado. Acredito que posso iniciar um script, mas estou tentando descobrir como fazê-lo responder à saída do console.

Por exemplo:

ken@server:~$ svnsync sync https://svn3.backup.net/svn/mirror
Authentication realm: <https://svn3.backup.net/svn/mirror:443> backup.net Subversion Backup
Password for 'ken':
***<send return key>***
Username:***<specify backup.net username>***
Password for '<the name>':***<specify password for username>***
<It proceeds to check out>

em que ***< message >*** é a ação que eu quero que o script responda.

    
por Ken 09.02.2011 / 02:49

4 respostas

3

Eu estava em dúvida quando você disse "svnsync sync não aceita opções para especificar um login" então eu verifiquei o documentação e adivinhe, faz :

--source-password
--source-username
--sync-password
--sync-username

Essas opções devem ser suficientes para você voltar a um script cron simples.

De volta ao caso em que você realmente não pode especificar essas opções, ainda é fácil escrever um script de wrapper que envie dados para o stdin do programa. Por exemplo, o seguinte pode funcionar (onde program é o programa que você deseja executar e text é um arquivo em que você armazena o texto a ser enviado para o programa):

program < text

No entanto, para autenticação, os programas geralmente são gravados em tty e não em stdin (por motivos de segurança). Eu não estou familiarizado com isso, mas você ainda pode criar um terminal falso nesse caso. Isto é onde expect entra em uso.

    
por 09.02.2011 / 04:12
3

expect pode ajudar.

Existe um tutorial da O'Reilly .

    
por 09.02.2011 / 03:09
1

Só que isso significa colocar as senhas claras em algum script.
Não é uma boa ideia.

O svnsync não tem opções para chaves ssh?

    
por 09.02.2011 / 04:17
1

Duas soluções semelhantes:

  • expect (conforme fornecido por outras respostas), que requer TCL.
  • pexpect , escrito em Python puro.
por 09.02.2011 / 15:15