Java 和 Runtime.getRuntime().exec(String cmd)

标签 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 中它没有。 我尝试过这样的事情,但没有结果。

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);

你能解释一下我想念的东西吗?提前致谢。 最良好的祝愿安德烈

最佳答案

您忽略了流重定向 > 是此处不存在的 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"。我个人更喜欢这个解决方案。

关于Java 和 Runtime.getRuntime().exec(String cmd),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195839/

相关文章:

java - 预计日期有月数和天数差异?

java - 在运行 hadoop 分布式模式时一直失败

java - 如何为只读数据库表建立索引搜索?

java - java中的多个构造函数

linux - Python - [SSL : CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl. c:1091)

java - mapper执行的判断

linux - Linux 的设备驱动程序文档

MySQL命令行导入导致sql文件变空

linux - 在 Lion 终端中的远程 Linux 机器上打开 vi 时遇到问题

java - 通过Java启动appium服务器