Java e Shell Script

Olá, alguém sabe me dizer como uma variável ou objeto em java pode receber o conteúdo de uma variável em shell e vice-versa?

Outra pergunta é: como fazer para uma variável ou objeto em java poder receber o tamanho de um arquivo qualquer (kb ou MB).

sim, estude o método getenv

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#getenv()

a) Para receber uma variável do shell, pode-se passá-la pela linha de comando para o programa Java.

Exemplo: (Linux)

#!/bin/bash
TESTE=/usr/bin/java
java -Dvariavel=${TESTE} -classpath . MinhaClasse

e no programa Java:

...
    String variavelTeste = System.getProperty ("variavel");

Além do “-D” você pode passar parâmetros para o programa, mais ou menos como se faz em C (só que eles começam a partir do [0], não do [1] como em C).

public static void main(String[] args) 

Para setar uma variável do shell, não dá (exceto pela variável que representa o código de retorno do java).

mesmo que vc pudesse setar uma variavel de ambiente do shell, esta valeria para aquele subshell que a maquina virtual abriria, não o shell corrente. com o fim do subshell a variavel desapareceria :wink:

Na verdade, as únicas coisas que podem setar variáveis do shell “permanente” são script shells, e ainda por cima usando a declaração “EXPORT” se for o caso do Bourne/Korn/bash shell.

TESTE=/usr/bin/java

só permanece dentro do shell que está sendo usado.

export TESTE=/usr/bin/java (Korn/bash shell)
ou
TESTE=/usr/bin/java ; export TEST (Bourne/Korn/bash shell)

só podem ser feitas por shells.

Uma forma meio radical de setar uma variável de shell é fazer com que o programa executado gere apenas UMA linha de saída, e usar as aspas invertidas, algo como:

BASENAME=basename /usr/bin/joe

onde basename é um programa que pega o seu primeiro parâmetro , remove tudo que vai até a última barra, e imprime apenas o nome-base (que nesse caso é “joe”. A instrução acima seria equivalente a:

BASENAME=joe