java - 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 语句,有人可以帮我吗?
解决方案
解决方案如下:
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");
}
}
我通过环境变量传递密码。谢谢大家!
推荐阅读
- android - ReactAndroid:react-native升级时buildReadctNdkLib FAILED
- javascript - 通过 HTML 表单页面安全地将 JSON 发送到服务器
- elasticsearch - Percentage for each bucket
- python - 在抓取 Web 内容时,无法使用先例函数输出作为下一个函数的输入
- react-native - 如何在博览会中删除发布代码更新?
- android - 对新项目使用本地 gradle 分发而不是包装器
- c# - 如何在 c# uwp 中创建一个自动执行某些操作的输入框?
- gitlab - 如何在 gitlab-ce 中启用功能标志?
- javascript - 如何编写代码以附加代码并从给定的 json 数据运行值
- php - Laravel 迁移抛出外键异常