Java ProcessBuilder和bash
我正在尝试使用Java ProcessBuilder和bash,java,bash,processbuilder,Java,Bash,Processbuilder,我正在尝试使用ProcessBuilder 我的代码是: Process createUser = buildProcess( "/bin/su", "-c", "\"/opt/somedir/testdir/current/bin/psql", "--command", commandForUserCreation, /* "'select * fr
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'
如果我把echo
放在命令的第一位,它会在bash中打印正确的命令,如果我复制/粘贴这个命令,它就会工作
请帮助我解决此问题。这是我在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);
}
我希望它能有所帮助。您需要将整个命令作为单个参数提供给
su
执行。试试这个:
Process createUser = buildProcess(
"/bin/su",
"-c",
"/opt/vmware/vpostgres/current/bin/psql --command " + commandForUserCreation + " --dbname mydbname",
myuser
);