我正在使用这种方法向linux终端发送命令
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();
}
它适用于许多命令,如“ls”、“date”等。
但我想使用 psql 命令将 sql 文件导入 postgre,例如:
psql -h localhost -p 5432 -U postgres -d test -f test.sql
我在终端中手动输入了这个命令,它工作正常,但不适用于上述方法(该方法适用于日期,ls ...)
当它调用 psql 时,它看起来像是一种无限循环中的方法条目。当方法调用 psql 时,方法不会结束。
ps:我使用export PGPASSWORD=pass来避免传递密码。