Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java和Runtime.getRuntime().exec(字符串cmd)_Java_Linux_Terminal_Openssl - Fatal编程技术网

Java和Runtime.getRuntime().exec(字符串cmd)

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中却不行。 我尝试过这样的事

我正在尝试编写一个程序,该程序必须在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中却不行。 我尝试过这样的事情,但没有结果

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错误,但您的文件是正确的。谢谢