首页 > Java > java教程 > 如何使用Java运行时可靠地执行Shell命令?

如何使用Java运行时可靠地执行Shell命令?

Susan Sarandon
发布: 2024-12-06 05:43:10
原创
567 人浏览过

How Can I Reliably Execute Shell Commands with Java's Runtime?

在 Java 运行时中操作 Shell 行为

使用 Java 的 Runtime.exec(String) 实用程序时,执行某些 shell 命令之间可能会出现差异。要理解这些异常,我们必须深入研究 shell 操作的机制。

了解 Shell 职责

Shell 执行支持命令执行的关键任务,包括:

  • 报价和空间处理: Shell 确保准确解析参数,防止空格破坏“My File.txt”等字符串。
  • Glob 扩展: 在执行之前,Glob (*, ?) 会扩展为特定文件名。
  • 重定向管理: Shell 管理命令输出的管道 (|) 和重定向 (>)和输入。
  • 变量和命令扩展:可以扩展 $HOME 等变量,可以执行 $(pwd) 等命令并将其插入命令字符串中。

执行原因失败

通过 Runtime.exec(String) 调用时,依赖于 Shell 的命令可能会失败,因为:

  • 缺乏 Shell 功能: Runtime.exec (String) 执行命令时不调用 shell,这意味着它缺少 shell 的处理

解决方法

简单但不完美:

使用 Runtime.exec(String[]) 和将命令传递给 shell 解释器允许直接命令执行:

String myFile = "some filename.txt";
String myCommand = "cp -R '" + myFile + "' $HOME 2> errorlog";
Runtime.getRuntime().exec(new String[] { "bash", "-c", myCommand });
登录后复制

稳健且安全:

为了提高安全性和稳健性,请使用 ProcessBuilder 显式处理 shell 职责:

String myFile = "some filename.txt";
ProcessBuilder builder = new ProcessBuilder(
    "cp", "-R", myFile,
    System.getenv("HOME"));
builder.redirectError(ProcessBuilder.Redirect.to(new File("errorlog")));
builder.start();
登录后复制

以上是如何使用Java运行时可靠地执行Shell命令?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板