Como obter o valor de variáveis especiais do sistema operaciocional?

3 respostas
mizumoto

Bom dia,

Estou desenvolvendo um programa que em determinado momento executa um comando de prompt da seguinte forma:
Runtime.getRuntime.exec("comando");
Preciso  do valor de retorno do comando, armazenado na variável "$?" (linux) para saber  se o comando rodou com sucesso ou deu erro para prosseguir com o programa.
Segue um exemplo de como estou tentando obter esse valor da seguinte forma:

Runtime.getRuntime().exec("ls"); System.out.println(System.getenv("$?"));

Um simples comando "ls" deveria retornar "0", entretanto um valor "null" está sendo exibido.

Alguém saberia como posso fazer para obter corretamente o valor dessa variável, ou uma forma alternativa para resolver esse problema?

Obrigado,

3 Respostas

ViniGodoy

Não é assim que resolve. Todos os comandos de processos vão criar um espaço virtual para esse processo. É como se vc disparasse uma instância do bash para cada execução do exec, e essa instância fosse fechada assim que o exec acaba.

Ou seja, o getEnv jamais verá o que o exec fez.

O que você tem que fazer é controlar a saída padrão desse processo. Para isso, note que o getRuntime().exec retorna um objeto da classe Process. Para isso, você pode usar essa classe, que já deixei pronta: http://www.guj.com.br/java/213361-processbuilder#1087285

O que é interessante é que o bash também permite que você controle a entrada padrão. Isso quer dizer que vc poderia até mesmo interagir com um processo rodando, como se o java fosse o usuário que digitasse no teclado.

mizumoto

Obrigado ViniGodoy,

Até hoje nunca havia precisado obter o retorno de um comando disparado por "Runtime.getRuntime.exec("...")" e por distração não havia percebido que isso aí retornava um Process.
O código ficou da seguinte forma:

Process p=Runtime.getRuntime().exec("ow_prj_access uoes_utm_sirgas2k39w"); p.waitFor(); System.out.println(p.exitValue());

ViniGodoy

Ah claro, você só quer o valor de retorno do comando, não o que é listado no ls.

A dica que dei é para você obter o que é listado no ls. Guarde-a num cantinho, pois se vc usa exec, logo, logo vai precisar disso. :slight_smile:

Criado 10 de maio de 2011
Ultima resposta 10 de mai. de 2011
Respostas 3
Participantes 2