Java不执行一个sh文件,永不结束
Java does not execute one sh file, and never ends
我正在尝试执行 运行 postgres 命令的一个 sh 文件,但它永远不会结束。
sh 文件是:
#!/bin/bash
echo "My ARGUMENTS ";
psql -h -p -U -d template1 -c "drop database IF EXISTS ";
psql -h -p -U -d template1 -c "create database ";
echo "OPERATION COMPLETED";
我的 java 方法如下:
public void createDB() {
try{
ProcessBuilder builder = new ProcessBuilder();
builder.command("sh", "-c", "ls");
ProcessBuilder pb = new ProcessBuilder("/tmp/test.sh", "localhost", "5432", "postgres", "newDB");
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
{
System.out.println(line);
}
}catch (Exception e) {
System.out.println("ERORR");
}
}
输出是:
My ARGUMENTS localhost 5432 postgres newDB
但是永远不要执行第二个psql语句,有人可以帮我吗。
解决方法如下:
public void createDB() {
try{
ProcessBuilder builder = new ProcessBuilder();
builder.command("sh", "-c", "ls");
ProcessBuilder pb = new ProcessBuilder("/tmp/test.sh", "localhost", "5432", "postgres", "newDB");
// set environment variable password
env.put("PGPASSWORD", "123456");
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
{
System.out.println(line);
}
}catch (Exception e) {
System.out.println("ERORR");
}
}
我通过环境变量传递密码。感谢大家!
我正在尝试执行 运行 postgres 命令的一个 sh 文件,但它永远不会结束。
sh 文件是:
#!/bin/bash
echo "My ARGUMENTS ";
psql -h -p -U -d template1 -c "drop database IF EXISTS ";
psql -h -p -U -d template1 -c "create database ";
echo "OPERATION COMPLETED";
我的 java 方法如下:
public void createDB() {
try{
ProcessBuilder builder = new ProcessBuilder();
builder.command("sh", "-c", "ls");
ProcessBuilder pb = new ProcessBuilder("/tmp/test.sh", "localhost", "5432", "postgres", "newDB");
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
{
System.out.println(line);
}
}catch (Exception e) {
System.out.println("ERORR");
}
}
输出是:
My ARGUMENTS localhost 5432 postgres newDB
但是永远不要执行第二个psql语句,有人可以帮我吗。
解决方法如下:
public void createDB() {
try{
ProcessBuilder builder = new ProcessBuilder();
builder.command("sh", "-c", "ls");
ProcessBuilder pb = new ProcessBuilder("/tmp/test.sh", "localhost", "5432", "postgres", "newDB");
// set environment variable password
env.put("PGPASSWORD", "123456");
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
{
System.out.println(line);
}
}catch (Exception e) {
System.out.println("ERORR");
}
}
我通过环境变量传递密码。感谢大家!