executa vários scripts bash com o código esperado e os deixa executando

1

Eu tenho um monte de vários scripts bash que irão realizar algumas ações que exigem entrada do usuário, portanto, estou usando o esperado com ele.

No entanto, preciso de um para continuar correndo. Mas se eu usar o expect, o comando expect aguardará enquanto o script estiver em execução e meu script principal não continuará.

IE: script1 gera um script como root:

#!/bin/bash
expect << EOF
spawn su root -c "/bin/bash script2.sh"
expect "Password:"
send "test\n"
set timeout -1
expect eof;
EOF

script2.sh irá gerar uma tela:

#!/bin/bash
screen -dm nastyscript.sh

nastyscript.sh irá gerar um binário que deve continuar em execução:

#!/bin/bash
expect << EOF
spawn mybinary
expect "*Enter password for my binary"
send "test\r"
expect "*I am running"
set timeout -1
expect -re . { exp_continue } eof { exit }
expect eof;
EOF

Mas, como um script está aguardando a conclusão, meu script principal não continuará.

Qualquer maneira de fazer isso?

    
por Andreas Calvo 15.06.2011 / 17:57

1 resposta

1

Primeiro, você absolutamente não quer enviar uma senha com expectativa. Além de ser um estilo muito ruim, isso prejudica totalmente a segurança do seu sistema, pois você precisa armazenar uma senha de usuário em texto não criptografado. E todos neste dia e idade sabem de cor que você nunca deve armazenar senhas em texto puro, nunca.

Eu recomendaria a leitura na página de manual para sudoers . Então você pode usar o sudo de dentro do script sem ter que armazenar as senhas claramente. Uma solução mais sólida provavelmente seria um executável com o suid root. Os scripts do shell não podem ter suid por motivos de segurança, portanto, isso exigiria a compilação de um pequeno programa.

Por outro lado, se você tiver certeza de que precisa de vários processos sendo executados em comunicação paralela entre si, a versão 4 do bash oferece uma solução na forma da palavra-chave coproc . Basicamente, você coloca coproc na frente de uma linha de comando. Para comandos simples, ele tem aproximadamente o mesmo efeito que um & no final da linha de comando; o processo será executado em paralelo com o seu script. A diferença é que com coproc você tem os descritores de arquivo stdout e stdin do outro processo disponível na matriz COPROC , para que seu script possa se comunicar com o outro processo. Consulte o link

Então, você também pode querer wait no outro processo antes do script sair.

    
por 16.06.2011 / 23:38