[quote=entanglement]Como o script está em um diretório diferente, eu recomendaria passar o diretório completo para o programa Java, de alguma forma (como configuração, digamos).
Mas como scripts tendem a só funcionar corretamente se estiverem em um determinado diretório, eu recomendaria uma abordagem diferente.
No ProcessBuilder existe um modo de você ir para o diretório desejado ANTES de executar o programa.
Vou modificar um exemplo que está no próprio javadoc do ProcessBuilder. Vou fazer o seguinte: digamos que o script.sh esteja no diretório /opt/local, e que só execute corretamente se ele rodar no diretório /home/diego/projetos/exemplo. O comando adequado para o script.sh (supondo que ele seja um script Bash) seria:
http://docs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html
ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "/opt/local/script.sh"); // note que script.sh não roda sozinho; ele precisa do bash para ser executado
pb.directory(new File("/home/diego/projetos/exemplo")); // Equivale a você digitar "cd /home/diego/projetos/exemplo" antes de você dar o comando /opt/local/script.sh
Process p = pb.start(); // e é aqui que o comando é realmente executado
[/quote]
Na verdade o scrip, rodaJava.sh, deve ser executado dentro da pasta/diretório que ele está.
Ou seja, o meu Projeto Java X, executado o comando ProcessBuilder para o rodaJava.sh entrar em execução, esse irá gerar informações dentro da pasta dele mesmo, ao finalizar esse processo, irei, com o projeto X, ler essas informações.
Para isso eu fiz da seguinte maneira:
// "-c" significa?
// rodaJava.sh deve ser executado na pasta dele mesmo, pois ele tem dependências de outros arquivos dentro dessa pasta.
ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c",
"/home/laboratorioic/omnetpp/Castalia-3.2/Simulations/redesCorporais/rodaJava.sh");
pb.directory(new File("/home/laboratorioic/omnetpp/Castalia-3.2/Simulations/redesCorporais"));
try {
Process p = pb.start();
} catch (IOException ex) {
Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
}
Parece que ele executa de modo incompleto, pois rodaJava.sh apagar os arquivos txt na sua pasta, o que ele deve fazer mesmo, mas o resultado final não é gerado.
Pelo terminal funciona normalmente.
laboratorioic@laboratorioic-Vostro-260s:~$
laboratorioic@laboratorioic-Vostro-260s:~$ cd omnetpp/Castalia-3.2/Simulations/redesCorporais/
laboratorioic@laboratorioic-Vostro-260s:~/omnetpp/Castalia-3.2/Simulations/redesCorporais$ ./rodaJava.sh
No final da execução é gerado txt com valores.
Tem ideia do que pode ser?
Desde já agradeço pela ajuda!