我在Ubuntu环境中使用jar执行openSSL命令时遇到问题。我的结论是,发生这种情况是由于文件路径中的空间正在作为命令中的参数(例如,以下命令中的SHA
256)传递。我已经使用了进程和ProcessBuilder
类来执行相同的操作:
首先 :
String certFilePath = "/home/mplusuer/Desktop/Nishant/210515/TestData/TestData/SHA 256/nishant.cer"
String []cmdGetAlgorithm = new String[3];
cmdGetAlgorithm[0] = "openssl x509 -in";
cmdGetAlgorithm[1] = certFilePath;
cmdGetAlgorithm[2] = "-noout -text -certopt no_subject,no_header,no_version,no_serial,no_validity,no_subject,no_issuer,no_pubkey,no_sigdump,no_aux,no_extensions";
ProcessBuilder pb = new ProcessBuilder(cmdGetAlgorithm[0], cmdGetAlgorithm[1],cmdGetAlgorithm[2]);
// setup other options ...
Process processGetAlgorithm = pb.start();
processGetAlgorithm.waitFor();
第二 :
Runtime runtime = Runtime.getRuntime();
String cmdGetAlgorithm = "openssl x509 -in "
+ certFilePAth
+ " -noout -text -certopt no_subject,no_header,no_version,no_serial,no_validity,no_subject,no_issuer,no_pubkey,no_sigdump,no_aux,no_extensions ";
Process processGetAlgorithm = runtime.exec(cmdGetAlgorithm);
最终命令如下所示,如果在命令提示符下单独执行,则工作正常,但使用Java代码执行时失败:
openssl x509 -in /home/mplusuer/Desktop/Nishant/210515/TestData/TestData/SHA 256/suketu.cer \
-noout -text -certopt no_subject,no_header,no_version,no_serial,no_validity,no_subject, \
no_issuer,no_pubkey,no_sigdump,no_aux,no_extensions
我也使用以下方法解决了此问题,但是没有按预期工作:
String quoted = "\"" + certFilePath + "\"";
String escaped = certFilePath.replace(" ", "\\ ");
请查看并帮助我解决该问题。
cmdGetAlgorithm[0] = "openssl x509 -in"; ...
正如@immibis在评论中所述,arg[0]
是程序名称。因此向量应类似于:
cmdArg[0] = "/usr/local/ssl/bin/openssl";
cmdArg[1] = "x509";
cmdArg[2] = "-in";
cmdArg[3] = certFilePAth;
cmdArg[4] = "-noout"
cmdArg[5] = "-text";
cmdArg[6] = "-certopt";
cmdArg[7] = "no_subject,no_header,no_version,no_serial,no_validity," +
"no_issuer,no_pubkey,no_sigdump,no_aux,no_extensions ";
您应始终指定可执行文件的完整文件名,以确保您正在运行预期的可执行文件,而不是对手植入的文件。
本文向大家介绍PowerShell命令中包含空格如何运行?,包括了PowerShell命令中包含空格如何运行?的使用技巧和注意事项,需要的朋友参考一下 在PowerShell中,可以直接运行命令。包括.exe结尾的、.com结尾的可执行程序,包括.bat结尾的、.cmd结尾的批处理程序,还有.vbs结尾的、.ps1结尾的脚本程序。均可以使用如下方式运行程序: <程序文件名>.<后缀> [参数列表]
问题内容: 我是Java的新手,因此尝试将我的项目之一从C转换为Java,以便将其与另一个Java程序结合在一起。使用Runtime.exec()时,很难获得正确的结果。我有以下程序段,而Java将忽略以处理给定的命令。 这里的问题是文件名“ metabolic waste.txt”。没有空间时,相同的命令起作用。我知道我必须将转义字符用于空间,并且做到了。我正在研究Ubuntu btw。 我也尝
cmd=powershell。exe$passwd=convertto-securestring-AsPlainText-Force-String-abc$cred=新对象-类型名System.Management.Automation。PSCredential-参数列表“xyz”,$passwd$session=new-PSSession-Computer-mobilesaucelabs.wes
我正在尝试使用ProcessBuild运行cmd语句。 但是,我只能打开cmd。exe 那么如何编写此语句通过java运行cmd命令??我得到了错误,因为语句由"*"组成。如何编辑ProcessBuilder以便我可以运行语句?非常感谢
问题内容: 以下工作并打印命令输出: 但是此操作失败(退出状态为1): 有什么建议? 问题答案: 您可以这样做:
问题内容: 一个人如何从Python调用一个包含管道的shell命令并捕获输出? 假设命令是这样的: 我想要做的与Perl相当的东西是这样的: 问题答案: 使用subprocess.PIPE,如子流程文档部分“替换外壳管道”中所述: 或者,使用模块,管道成为功能的组合: