我想在其中运行一些unix/shell命令Java并处理输出。我曾经用过getRuntime.exec(),但是对于某些命令,例如,它没有给出正确的输出ls directory_path/*.tar.gz。对于该命令,我的程序没有给出任何输出,但给出了错误提示No such file or directory。但是,同一命令在命令提示符下给出正确的输出。
unix/shell
Java
getRuntime.exec()
ls directory_path/*.tar.gz
No such file or directory
还有其他方法可以执行包含Java通配符的命令吗?
就在这里。
您的代码中存在三个潜在的问题:
请遵循我在此处提供的示例:
* [如何使一个Java程序同时打印out.println()和err.println()语句?](https://stackoverflow.com/questions/3754841/how-to-make-a-java-program-to-print-both-out-println-and-err-println-)
*如果您天真地通过,则shell扩展将不起作用Runtime.exec。您必须/bin/bash显式地进行。
*
Runtime.exec
/bin/bash
如果您尝试列出内容,则directory_path/*.tar.gz应该知道(如果不是以a开头/),directory_path将相对于 当前工作目录 进行解析。首先尝试给出绝对路径以确保它可以工作,然后尝试找出为什么找不到相对路径。
directory_path/*.tar.gz
/
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();