Runtime.exec(String) 提供了一种从 Java 程序执行系统命令的方法。然而,用户可能会遇到执行结果的差异,某些命令成功,而其他命令失败或行为异常。本文探讨了这些异常的根本原因,并探讨了可靠命令执行的替代方法。
命令在依赖所提供的基本服务时会失败通过 shell,Runtime.exec(String) 不使用 shell。这些服务包括:
只要使用上述任何 shell 功能,命令就会失败。常见场景包括:
-带有空格或特殊字符的文件名
-通配符或通配符
-输入/输出重定向
-环境变量或命令扩展
< ;h3>解决方案
存在两种主要方法为了规避这些异常并可靠地执行命令:
委托给 Shell(简单但有缺陷):
一种选择是将执行委托给 shell,例如 bash,它处理所有必要的服务。然而,这种方法可能会带来安全风险并损害稳健性。
Shell 替换(安全且稳健):
更安全、稳健的方法是承担 shell 的职责。这涉及了解 Unix 执行模型、shell 提供的服务以及如何以编程方式复制它们。 ProcessBuilder 提供了一种通过手动处理分词、变量扩展和重定向来实现此目的的方法。
以上是为什么 `Runtime.exec(String)` 失败,如何在 Java 中可靠地执行系统命令?的详细内容。更多信息请关注PHP中文网其他相关文章!