小编典典

如何使用Java使用通配符运行Unix / Shell命令?

java

我想在其中运行一些unix/shell命令Java并处理输出。我曾经用过getRuntime.exec(),但是对于某些命令,例如,它没有给出正确的输出ls directory_path/*.tar.gz。对于该命令,我的程序没有给出任何输出,但给出了错误提示No such file or directory。但是,同一命令在命令提示符下给出正确的输出。

还有其他方法可以执行包含Java通配符的命令吗?


阅读 211

收藏
2020-11-01

共1个答案

小编典典

还有其他方法可以执行包含Java通配符的命令吗?

就在这里。

您的代码中存在三个潜在的问题:

  1. 假设您想查看外部命令的输出,则需要照顾它产生的输出并自己打印。

请遵循我在此处提供的示例:

* [如何使一个Java程序同时打印out.println()和err.println()语句?](https://stackoverflow.com/questions/3754841/how-to-make-a-java-program-to-print-both-out-println-and-err-println-)
  1. *如果您天真地通过,则shell扩展将不起作用Runtime.exec。您必须/bin/bash显式地进行。

  2. 如果您尝试列出内容,则directory_path/*.tar.gz应该知道(如果不是以a开头/),directory_path将相对于 当前工作目录 进行解析。首先尝试给出绝对路径以确保它可以工作,然后尝试找出为什么找不到相对路径。

这是一个应该起作用的完整示例:

Process proc = new ProcessBuilder("/bin/bash", "-c",
                                  "ls /.../directory_path/*.tar.gz").start();

Reader reader = new InputStreamReader(proc.getInputStream());
int ch;
while ((ch = reader.read()) != -1)
    System.out.print((char) ch);
reader.close();
2020-11-01