首页 > 解决方案 > Java不执行一个sh文件,永远不会结束

问题描述

我正在尝试执行一个运行 postgres 命令的 sh 文件,但它永远不会结束。

sh 文件是这样的:

 #!/bin/bash
echo "My ARGUMENTS $1 $2 $3 $4";
psql -h $1 -p $2 -U $3 -d template1 -c "drop database IF EXISTS $4";
psql -h $1 -p $2 -U $3 -d template1 -c "create database $4";
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");
        }
}

输出是:

我的参数 localhost 5432 postgres newDB

但是永远不要执行第二条 psql 语句,有人可以帮我吗?

标签: javapostgresqlsh

解决方案


解决方案如下:


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");
        }
}

我通过环境变量传递密码。谢谢大家!


推荐阅读