--- Em [email protected], "Julio C. Neves" <julio.ne...@...> escreveu > > Eu acho que o assunto é bastante pertinente. Opessoal que usa shell > normalmente é admin e isso é um assunto interessante para qq admin que > mereça esse nome. > > Eu tentaria uma coisa totalmente diferente, pois acho que compromete menos o > processador. Seguinte: > > Script1 > ======= > mkfifo tubo > tail -f <(ls) > tubo > > O processo do tail permanece em waiting enquanto não se cria arquivo e qdo > criá-lo ele será enviado para o named pipe. > > Script2 > ======= > while : > do > ArqNovo=$(cat tubo) > .... > .... > done > > O named pipe precisa de um cara falando e outro ouvindo. Esse cat tubo > ligará um semáforo do S.O. e ficará esperando (sem onerar absolutamente > nada) a mudança deste semáforo que se dará qdo o outro processo "falar" do > outro lado do tubo e o que ele falou irá para a variável ArqNovo para que vc > possa trabalhar o dado da forma que vc quiser. > > Se enquanto o script2 estiver trabalhando o dado, for criado um novo > arquivo, o script1 ficará em waiting até que termine o ciclo do while e o > prg volte para o cat. > > Cara dê uma olhada em www.julioneves.com. Acho que a parte referente a named > pipe e substituição de processo [<(ls)] estão no Papo de Botequim 11. Lá tá > tudo mastigado e cheio de exemplos.
Júlio, entendi sua sugestão, mas não consegui implementá-la. A atribuição da variável ArqNovo não está funcionando. O subprocesso (cat tubo) não retorna, enquanto o tail da outra ponta do pipe não é encerrado e, portanto, o loop não gira. Abri 3 shells no servidor. No primeiro, crei o pipe e rodei o tail. No segundo, rodei o cat no pipe e, em um terceiro shell, criei arquivos no diretório. Não funcionou. Veja o que fiz: http://pastebin.com/MrgeP056 Como era esperado, o 'cat pipe' não retorna, enquanto o processo do tail não encerra. Mas também não recebe novos dados dele quando crio novos arquivos no diretório "dir_in". O problema de não atualizar quando se cria novos arquivos não está no fato de que, embora o tail -f segure o pipe aberto, o ls, por sua vez, é executado uma única vez e não há instrução que force sua repetição?
