dúvida sobre Runtime.getRuntime();

Bom, eu to desenvolvendo um projeto opensource e to tendo umas dúvidas sobre o funcionamento do Runtime.getRuntime();

primeiro tentei usar ele para executar o comandu mysqldump -u root teste > /home/kayo/teste.sql mas não executa. depois tentei para mysqldump -u root -p teste > /home/kayo/teste.sql e esse me retornava o pedido de senha… mas mesmo assim não tive sucesso :slight_smile: então usei para abrir o gedit(notepad no windows) e abriu.

então entendi que o Runtime serve para executar uma ação no sistema e não um comando/escrever na shell, to certo? Se sim, como posso então escrever na shell? Preciso saber porque a funão de backup tera duas variaveis que vão dizer a database para ser copiada e o destino para ser salvo, então não posso usar um .bat como já observei pelo fórum.

grato. [desculpa pergunta denovo sobre runtime, mas é que tenho urgencia…]

(Também respondi sua outra pergunta)

O Runtime.exec executa sim um comando do sistema operacional , então vai rodar num shell.

Só que vc deve se lembrar de ter o executável no PATH, e se não estiver, vc deve setá-la.

Veja a assinatura: exec(String cmd, String[] envp)

O ‘envp’ é um conjunto de Strings com as variáveis de ambiente (nome e valor) com as que a JVM vai setar o ambiente antes de executar o comando.

Você não precisa redirecionar a saída. Faça:

Process p = Runtime.exec(“comando”, strVariaveis);

e leia depois o stream no Process p, e poderá saber como foi executado o comando.

Este tipo de execução é síncrono, isto é, a JVM vai esperar ser executado até o fim para conitnuar a execução do programa.

Ah para passar a senha, vc pode pegar o outputStream do processo (p.getOutputStream) e gravar nele: ele será a standard in do que foi acionado, então vc pode escrever a senha lá !

ahh entendi, então mysqldump seria uma posicao no array -u outra e assim por diante então? assim podendo executar um comando na shell? acertei ou vuei? =)

Não, o array é de variáveis de ambiente.

A sua senha não é uma variável de ambiente, seria um argumento a ser digitado após o início da execução do aplicativo.

O melhor mesmo é passar tudo na linha de comando. Se não funcionar, vc terá que abrir o outputStream do processo em execução para ‘escrever’ a senha sem ter que abrir uma tela de um editor.

Variáveis de ambiente seriam o caminho (PATH), caminho de bibliotecas necessárias, quando é requerido, ou alguma variável que o shell precise.

Ok ?

Fiz um exemplo a partir do que entendi que seria seu caso, vê se ajuda a clarear como é executado…