Java + Linux

7 respostas
L

Olá pessoal, sou novo no forúm, mas sei um tanto sobre java.

Então, vamos ao problema:

Estou desenvolvendo uma interface gráfica para uma ferramenta no ambiente linux.
A minha interfaçe chama o script (um “.sh”) usando o RunTime.
O problema é que a ferramenta usa uma variável do linux, algo como $ROOT, que indica o lugar onde a ferramenta foi instalada (um diretório), e o java não entende isso
Se mando o caminho todo ele entende e funciona, mas o script também usa o $ROOT, assim, ele começa e para o script no meio…
Tem algum jeito do java entender isso?

Não da pra simplesmente colocar o path da ferramenta, pois a ideia é instalar em vários computadores, e o $ROOT de cada um varia

Obrigado desde já! (espero que entendam)

7 Respostas

B

Opa,

Seguinte, eu ja fiz alguns scripts, e geralmente eles sao feitos emcima de uma sintaxe de um terminal… teste passar antes da invocacao o shell que ele tera que exeuctar… tipo:

/bin.bash seuExec.sh
L
BrunoCarlo:
Opa, Seguinte, eu ja fiz alguns scripts, e geralmente eles sao feitos emcima de uma sintaxe de um terminal... teste passar antes da invocacao o shell que ele tera que exeuctar... tipo:
/bin.bash seuExec.sh

Desculpa não entendi bem o que devo fazer

private static String valiInst = "$VALIMPI_ROOTI/vali_inst/vali_inst";
        //$VALIMPI_ROOT = /home/andre/ValiMPI
        public static void valiInst(JTextField field, String filePath, JTextArea area){
            List inst = new ArrayList();
            inst.add(valiInst);

            inst.add(filePath);

            String[] run = (String[]) inst.toArray(new String[inst.size()]);

            try{
                area.setLineWrap(true);

                Process proc = Runtime.getRuntime().exec(run);

estou tentando fazer isso, o script $VALIMPI_ROOTI/vali_inst/vali_inst recebe um arquivo, que está no filePath

vc quer q eu faça isso?

private static String valiInst = "$VALIMPI_ROOTI/vali_inst/vali_inst";
        //$VALIMPI_ROOT = /home/andre/ValiMPI
        public static void valiInst(JTextField field, String filePath, JTextArea area){
            List inst = new ArrayList();
            inst.add(valiInst);

            inst.add(filePath);
            /bin.bash $VALIMPI/vali_inst/vali_inst
            String[] run = (String[]) inst.toArray(new String[inst.size()]);

            try{
                area.setLineWrap(true);

                Process proc = Runtime.getRuntime().exec(run);

nao saquei...

B

Seria +/- isso:

private  static String valiInst = "/bin/bash $VALIMPI_ROOTI/vali_inst/vali_inst";
L
Obrigado pela resposta! Fiz um progresso, mas ainda da erro

Antes, dava uma exception do java (aparecia no compilador dizendo que não foi encontrado)

Agora o erro que da é do Processo (processo.getErrorStream())

/bin/bash: $VALIMPI_ROOT/vali_inst/vali_inst: Arquivo ou diretório não encontrado

o engraçado é que se mando esse mesmo comando para o shell, ele executa normal…
Tem mais alguma ideia do que pode ser?

Obrigado!

B

Para pegar variáveis de ambiente, tem duas formas:

  • [url=http://java.sun.com/javase/6/docs/api/java/lang/System.html#getenv%28%29]System.getenv()[/url] que retorna um mapa com chaves e valores, com as variáveis no teu sistema. Passando uma String com o nome da variável de ambiente, ele já pega o valor diretamente.
  • [url=http://java.sun.com/javase/6/docs/api/java/lang/System.html#getProperties%28%29]System.getProperties()[/url] que retorna um objeto Properties(implementação de uma map também) com chaves e valores. Estes valores são preenchidos passando como eles como argumentos para a máquina virtual, usando -D. Por exemplo: [b]java -Dminhavariavel=MeuValor ProgramaJava[/b]
L

Bruno Laturner:
Para pegar variáveis de ambiente, tem duas formas:

  • [url=http://java.sun.com/javase/6/docs/api/java/lang/System.html#getenv%28%29]System.getenv()[/url] que retorna um mapa com chaves e valores, com as variáveis no teu sistema. Passando uma String com o nome da variável de ambiente, ele já pega o valor diretamente.
  • [url=http://java.sun.com/javase/6/docs/api/java/lang/System.html#getProperties%28%29]System.getProperties()[/url] que retorna um objeto Properties(implementação de uma map também) com chaves e valores. Estes valores são preenchidos passando como eles como argumentos para a máquina virtual, usando -D. Por exemplo: [b]java -Dminhavariavel=MeuValor ProgramaJava[/b]

Obrigado!

Usei o getenv(), mas algumas variaveis ele retorna null.
Abri o shell e mandei “export”, ele mostro todas as variaveis, a que eu preciso (VALIMPI_ROOT) ta lá, mas o getenv retorna null,
se mando getenv(“SHELL”) ele retorna certo =/

Agora, se o metodo retornar o valor correto, consigo resolver esse problema de chamar o script.
O problema agora é que dentro desse script eu chamo outros scripts usando a variável.
Fiz um teste substituindo a variavel pelo seu valor no meu código. Ele chama certo, mas assim que encontra o primeiro $VALIMPI_ROOT ele retorna um erro do script…

Deu pra entender?
Bom seria se eu fizesse o java entender o $VALIMPI_ROOT

L

Bom, parece que não tem jeito (pelo que entendi, o “$” é um caracter reservado do java)
Então vou substituir todos os scripts que usam a variavel de ambiente pelo seu valor atual quando se roda o programa pela primeira vez
Se alguém surgir com outro método, é bem vindo.

Obrigado a todos!

Criado 27 de abril de 2010
Ultima resposta 30 de abr. de 2010
Respostas 7
Participantes 3