Java和Runtime.getRuntime().exec(字符串cmd)
我正在尝试编写一个程序,该程序必须在linux终端上执行相同的代码:Java和Runtime.getRuntime().exec(字符串cmd),java,linux,terminal,openssl,Java,Linux,Terminal,Openssl,我正在尝试编写一个程序,该程序必须在linux终端上执行相同的代码: openssl req -passout pass:abc -subj /C=US/ST=IL/L=Chicago/O=IBM Corporation/OU=IBM Software Group/CN=John Smith/emailAddress=smith@abc.ibm.com -new > johnsmith.cert.csr 在终端中,它可以正常工作,但在Java中却不行。 我尝试过这样的事
openssl req -passout pass:abc -subj /C=US/ST=IL/L=Chicago/O=IBM Corporation/OU=IBM Software Group/CN=John Smith/emailAddress=smith@abc.ibm.com -new > johnsmith.cert.csr
在终端中,它可以正常工作,但在Java中却不行。
我尝试过这样的事情,但没有结果
String[] cmd = { "openssl", "req -passout pass:abc -subj", "/C=US/ST=IL/L=Chicago/O=IBM Corporation/OU=IBM Software Group/CN=John Smith/emailAddress=smith@abc.ibm.com", "-new > johnsmith.cert.csr" };
Runtime.getRuntime().exec(cmd);
你能给我解释一下我错过了什么吗?提前谢谢。
最好的祝愿Andrey您错过了一个事实,即流重定向
是shell的一项功能,但在这里并不存在
您可以使用/bin/sh-c
预先结束命令,也可以使用java重定向输出:
Process proc = Runtime.getRuntime().exec(cmd);
InputStream in = proc.setOutputStream();
OutputStream out = new FileOutputStream("johnsmith.cert.csr");
int b;
while( (b = in.read()) != -1) {
out.write(b);
}
out.flush();
out.close();
现在,您可以从命令行中删除johnsmith.cert.csr“”。我个人更喜欢这个解决方案 您是否尝试过:
Runtime.getRuntime().exec(“openssl req-passout pass:abc-subc/C=US/ST=IL/L=Chicago/O=IBM Corporation/OU=IBM Software Group/CN=John Smith/emailAddress=smith@abc.ibm.com-新>约翰史密斯证书“代码>?您是否看到任何错误?如果是,错误消息是什么?请阅读(并实施)的所有建议。这可能会解决问题。如果没有,它应该提供更多关于失败原因的信息。然后忽略它引用的exec
,并使用ProcessBuilder
构建流程。还要将字符串arg
分解为字符串[]args
,以说明本身包含空格的参数。谢谢。我发现命令中有syntacsys错误,但您的文件是正确的。谢谢