shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Enviado uma resposta a um script rodando em backgroun


From: moysespr
Subject: Re: [shell-script] Enviado uma resposta a um script rodando em background
Date: Thu, 6 Oct 2005 06:18:09 -0700 (PDT)

Parece que se trata de um read do shell ou algo semelhante. Concluí que
sempre deve haver um operador humano para essa resposta.
Considero que BG e interação humana não combinam.

Poderia tentar algo assim:
echo Mensagem >`tty`
read
Mas se está em bg provavelmente não tem terminal.
Poderia cancelar os redirecionamentos de 1 e 2 antes da pergunta e voltar a
redirecioná-los depois. Mas para onde iria a mensagem?
Para o terminal de onde foi chamado o script (se chamado de terminal)?
Para o terminal conectado à tela naquele momento? Mas quem gostaria de estar
com uma tela e receber algo nela inesperadamente, bagunçando-a, atrapalhando
o que está fazendo. Imagine que está editando um importante script como root,
não pode salvar naquele ponto e a tela ficou confusa. Fazer o que, salva com
outro nome e tenta retomar depois do ponto que estava? E a linha de
raciocínio?

Vou passar minha filosofia, não sei se pode ajudar.

Quando é obrigatória uma resposta humana nunca uso bg. Disparo o script em um
term ou xterm e vou trabalhar em outro. Coloco beeps (pode ser
freq/duração/intervalo variáveis), ou mesmo pronúncia via canal de som, para
me informar que certa condição esperada ocorreu. Daí, quando conveniente,
chaveio para lá e atuo.

Quando um script roda e precisa de uma reposta, mas na ausência de um humano
pode assumir uma resposta default, coloco um timeout, exemplo: read -t 30.
Posso usar som ou não para avisar da condição. Se não vier resposta dos
canais esperados o default é assumido e o script prossegue.

Em sistemas totalmente autônomos, com redirecionamentos para log, costumo
checar algum parâmetro recebido pelo script, que é passado pelo script
chamador. Quando preciso fazer algum debug não coloco o tal parâmetro na
chamada via linha de comando (aliás nem lembro dele) e não ocorre o
redirecionamento (nem um possível bg), permitindo plena interatividade.

Foi o que lembrei de momento. Como estou vivo e aprendendo a toda hora, esta
linha de pensamento pode mudar a qualquer momento, sem prévio aviso. :)

Espero que ajude de alguma maneira.

Se alguém tiver outras dicas vou gostar de tomar ciência.

Saudações




--- Charles Silveira <address@hidden> wrote:

> moysespr wrote:
> 
> >Nao ficou claro se é um leitor do script ou um binário chamado por ele que
> >aguarda dados.
> >
> >Ainda, essa resposta deve ser passada por um operador, pode ser
> automática, é
> >sempre a mesma, há outros pontos do script que precisam receber algo????
> >
> >Dois palpites:
> >1. read < <(echo yes)
> >2. redirecionar stdin também: exec <arq
> >
> >$ cat arq
> >yes
> >demaisInputs
> >
> >
> >
> >             
> >__________________________________ 
> >Yahoo! Mail - PC Magazine Editors' Choice 2005 
> >http://mail.yahoo.com
> >
> >
> >---------------------------------------------------------------------
> >Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> prévio aviso.
> >---------------------------------------------------------------------
> >Sair da lista: address@hidden
> >---------------------------------------------------------------------
> >Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> >---------------------------------------------------------------------
> > 
> >Links do Yahoo! Grupos
> >
> >
> >
> >
> > 
> >
> >
> >
> >  
> >
> Bem, vou exemplificar melhor:
> $./copia_arquivos.sh > exemplo.log 2>&1 &
> Na linha acima executo o script em background redirecionando a saida e o 
> erro padrao para o arquivo exemplo.log
> $tail -f exemplo.log
> Fico monitorando a execucao do script (saida e erro)
> Em algum momento do script, aparece uma pergunta ao usuario a respeito 
> de algo que o script deve fazer com o arquivo. No entanto, da forma como 
> estou executando eu vejo (leio) apenas no exemplo.log e não consigo 
> iteragir com o script.
> EX.:
> $cat exemplo.log
> Processando o arquivo1.txt
> ....
> ....
> ....
> Processando o arquivoN.txt
> Deseja apagar os arquivos na origem [s/n] ?
> 
> 
> E nao sai disso!
> Eu gostaria de enviar o caracter "s" como resposta para esse script 
> continuar a execucao e apagar os arquivos na origem....
> Entendeu?




                
__________________________________ 
Yahoo! Mail - PC Magazine Editors' Choice 2005 
http://mail.yahoo.com


reply via email to

[Prev in Thread] Current Thread [Next in Thread]