1.
есть лучший способ сделать это, кроме Runtime.getRuntime()
Что вы имеете в виду "лучше"?
2.
Runtime.getRuntime().exec(myCommand);
Это работает очень хорошо, но имейте в виду, что .bashrc (или аналогичные установки среды) не будет выполняться в этом случае. Более того, вы не фиксируете выход.
3. Как вспомогательная записка. Вот мой интерфейс оболочки:
import java.io.*;
public class Shell
{
Process proc;
BufferedReader in;
BufferedReader err;
PrintWriter out;
public Shell() throws IOException
{
proc = Runtime.getRuntime().exec("/bin/bash");
in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
err = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
exec("source ~/.bashrc");
}
public void exec(String cmd)
{
out.println(cmd);
try {
while (in.ready())
System.out.println(in.readLine());
while (err.ready())
System.err.println(err.readLine());
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void close()
{
try {
out.println("exit");
proc.waitFor();
while (in.ready())
System.out.println(in.readLine());
while (err.ready())
System.err.println(err.readLine());
in.close();
out.close();
proc.destroy();
}
catch (IOException e) {
e.printStackTrace();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void execute(String command) throws IOException
{
System.out.println("Executing: " + command);
Shell shell = new Shell();
shell.exec(command);
shell.close();
}
public static void main(String[] args) throws IOException
{
Shell.execute("ls -l ~");
}
}
возможно дубликат [Как запустить скрипт Unix из кода Java] (http://stackoverflow.com/questions/525212/how-to-run-unix- shell-script-from-java-code). Рассмотрим самый популярный ответ, который является превосходным в вашем случае. И, если бы вы были в типичной кросс-платформенной необходимости, я бы предложил вам пойти муравью. – Riduidel
+1 по дублированию –