我创build了一个独立的应用程序,我希望当用户点击运行button时,terminal应该打开,并在terminal上执行一个特定的命令。 我能够使用下面的代码成功地打开terminal…
Process process = null; try { process = new ProcessBuilder("xterm").start(); } catch (IOException ex) { System.err.println(ex); }
上面的代码打开一个terminal窗口,但我不能执行任何命令。 谁能告诉我该怎么做?
假设您正在尝试使用gedit命令,那么您需要提供gedit的全限定路径(例如/ usr / bin / gedit)。 同样,对于所有其他命令,请指定完整路径。
尝试
new ProcessBuilder("xterm", "-e", "/full/path/to/your/program").start()
在linux中执行任何命令,就像在终端中输入的内容一样:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class CommandExecutor { public static String execute(String command){ StringBuilder sb = new StringBuilder(); String[] commands = new String[]{"/bin/sh","-c", command}; try { Process proc = new ProcessBuilder(commands).start(); BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream())); String s = null; while ((s = stdInput.readLine()) != null) { sb.append(s); sb.append("\n"); } while ((s = stdError.readLine()) != null) { sb.append(s); sb.append("\n"); } } catch (IOException e) { e.printStackTrace(); } return sb.toString(); } }
用法:
CommandExecutor.execute("ps ax | grep postgres");
或者像以下一样复杂:
CommandExecutor.execute("echo 'hello world' | openssl rsautl -encrypt -inkey public.pem -pubin | openssl enc -base64"); String command = "ssh user@database-dev 'pg_dump -U postgres -w -h localhost db1 --schema-only'"; CommandExecutor.execute(command);