[RESOLVIDO]Ajuda com egrep + Runtime + Process[/RESOLVIDO]
6 respostas
jotinhaelloco
Pessoal, estou escrevendo um metodo para poder limpar comentários de arquivos de texto (linhas iniciadas com #)…
Mas quando executo o método abaixo, nada acontece (nem se cria o novo arquivo sem comentários, nem mostra-se erros na saida do programa)…
Quando executo o comando no terminal (egrep -v "^#|^$" /home/jotinhaelloco/teste.conf > /home/jotinhaelloco/teste2.conf - as contra-barras são caracteres de escape), ele funciona normal e gera o arquivo descomentado…
Alguem tem alguma sugestão?
public static void limparComentarios() {
try {
Runtime r = Runtime.getRuntime();
Process p;
p = r.exec("egrep -v \"^#|^$\" /home/jotinhaelloco/teste.conf > /home/jotinhaelloco/teste2.conf");
p.waitFor();
} catch (IOException ex) {
ex.printStackTrace();
} catch (InterruptedException exx) {
exx.printStackTrace();
}
}
not coment
not coment
not coment
not coment
not coment
not coment
not coment
not coment
not coment
not coment
ele mostra:
#coment
not coment
#coment
#coment
#coment
#coment
not coment
#coment
not coment
#coment
#coment
#coment
#coment
not coment
#coment
not coment
#coment
#coment
#coment
#coment
not coment
#coment
not coment
#coment
#coment
#coment
#coment
not coment
#coment
not coment
#coment
#coment
#coment
#coment
not coment
alguem teria alguma solução?
ricardo.ludwig
Você tem razão sobre o redirecionador da Shell o Java monta a string certa mas na hora da execução dá algum erro que não descobri ainda, por isso ainda acho válida minha sugestão de fazer seu código Java chamar uma Shell para executar esse comando.
A saída que vc está pegando nesse segundo código acredito que seja apenas a leitura do arquivo e não a saída do comando.
O código que anexo você pode verificar as saídas de erro da Shell. A linha comentada é uma shell que chamo para execução do comando, funciona perfeitamente.
PS. O seu comando para grep no meu Bash estava errado, eu alterei isso tb, eu uso Debian Lenny.
Abcs!
importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassTestGrep{publicTestGrep(){super();}publicstaticvoidmain(String[]args){Strings=null;longerro=0;try{Runtimer=Runtime.getRuntime();Processp;//p = r.exec("sh /home/lud/job_grep.sh");p=r.exec("egrep -v '^#|^$' /home/lud/teste.conf > /home/lud/saida.conf");p.waitFor();BufferedReaderstdError=newBufferedReader(newInputStreamReader(p.getErrorStream()));erro=p.exitValue();if(erro!=0){System.out.println("Erro na execucao do comando no shell:");while((s=stdError.readLine())!=null){System.out.println(s);}System.out.println("Saida da Execucao = 0 Sucesso != 0 Erro. Saida: "+erro);}}catch(IOExceptionex){ex.printStackTrace();}catch(InterruptedExceptionexx){exx.printStackTrace();}}}
jotinhaelloco
Opa cara, valew mesmo! Vô tentar isso! Mas eu estava querendo uma solução que não fosse precisar de nada externo…
Vou ver aki, se algo der certo, compartilho! Abraços!
jotinhaelloco
Valeu mesmo pela força ricardo.ludwig, mas acabei implementando uma solução baseada só em Java mesmo, sem usar comando externo!