当前位置: 首页 > 知识库问答 >
问题:

Java ProcessBuilder和bash

鞠安民
2023-03-14

我试图执行一个bash脚本从Java与ProcessBuilder我的代码是:

 Process createUser = buildProcess(
            "/bin/su",
            "-c",
            "\"/opt/somedir/testdir/current/bin/psql",
            "--command",
            commandForUserCreation,
            /* "'select * from users'", */
            "--dbname",
            "mydbname\"",
            "myuser"
            );

问题是我收到错误:

 /bin/su: unrecognized option '--dbname'

如果我将< code>echo放在我的命令的第一个位置,它会在bash中打印正确的命令,如果我复制/粘贴这个命令,它会工作!

请帮我解决这个问题。

共有2个答案

石臻
2023-03-14

这是我在processBuilder中使用的:

String[] command = new String[] {"echo", "Hello"};
String workspace = "/bin/su";
System.out.println("Trying to run command: "+ Arrays.toString(command));
ProcessBuilder probuilder = new ProcessBuilder(command);
probuilder.directory(new File(workspace));

Process process = probuilder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.printf("Output of running %s is:\n",Arrays.toString(command));
while ((line = br.readLine()) != null) {
    System.out.println(line);
}

希望有帮助。

薛承志
2023-03-14

您需要将< code>su要执行的整个命令作为单个参数提供。试试这个:

 Process createUser = buildProcess(
            "/bin/su",
            "-c",
            "/opt/vmware/vpostgres/current/bin/psql --command " + commandForUserCreation + " --dbname mydbname",
            myuser
            );
 类似资料:
  • 我想在JAVA程序中执行一个EXE文件。 它工作正常,但我希望EXE的输出立即在我的JAVA程序的文本区域中。 目前,我在“ping”命令完全完成后得到输出(因此JAVA程序挂起了大约3秒)。但是我想马上有结果... 我做错了什么? 突击队向后。 好吧,我想使用这个程序:https://iperf.fr/iperf-download.php 输出如下所示: 不过,我只有在iperf运行后才能得到这

  • 我用ProcessBuilder写了一个java程序来启动CMD提示符 控制台中的输出: SQL*Plus:2015年1月19日星期一14:07:53发布11.2.0.3.0 版权所有(c)1982、2011,Oracle。保留所有权利。 连接到:Oracle Database 11g Enterprise Edition 11.2.0.3.0版-64位生产,包括分区、Oracle标签安全、OLA

  • 我遇到了与Python相同的问题,无法在git bash的命令行中工作,在Git Bash中,当我键入时,它就挂起来了。 但是,键入非常有效。 什么是winpty?为什么上面的命令有用?

  • 以下脚本将备份目录 /var/www/websites中的所有网站并创建。tar.gz每个网站 /var/backup 但是,我需要从备份中排除日志文件夹和一个网站,就像我们通常使用tar作为 --exclude=$BAKPATH/*/logs或--EXCLUDES=$BAKBATH/website2.com 我不知道把它放在哪里?我试着跟随但它不工作 我应该放在哪里 -exclude = $ b

  • 问题内容: 关于它们有很多传说。我想知道真相。以下两个示例之间有什么区别? 问题答案: 不确定从何处获得传说,但: 提交按钮 与: IE6将在标记之间提交此按钮的所有文本,其他浏览器将仅提交值。使用可使您在按钮的设计上享有更大的布局自由度。从各种意图和目的看,它乍一看似乎很棒,但是各种浏览器怪癖使它有时很难使用。 在您的示例中,IE6将发送到服务器,而其他大多数浏览器将不发送任何内容。要使其跨浏览

  • 什么区别以及如何正确重写代码?