如何通过 Java 控制台应用程序的分页执行“less”?

fut*_*lib 5 java console paging less-unix

我需要less从我的 Java 控制台应用程序执行带有分页的命令。但是,我发现执行外部命令的唯一方法是Runtime.getRuntime().exec(),这要求我通过流写入/读取输入/输出。所以像catwork这样的命令(less实际上确实像cat),但我需要分页功能。

在 C 中,我会使用system(). 在 Ruby 中,Kernel.exec完成了这项工作。

有没有办法在Java中完成这项工作?

Jon*_*oni 2

当您执行外部进程时,Runtime.exec()其标准输入和输出流不会连接到您运行 Java 程序的终端。您可以使用 shell 重定向来连接它,但首先您需要知道要使用哪个终端。无法使用标准 API 找到终端,但您可能可以找到一个开源库来实现这一点。

为了确保它可以完成,该程序在以下位置打开自己less

public class Test {
    public static void main(String[] args) throws Exception {
        Process p = Runtime.getRuntime().exec(
                new String[] {"sh", "-c",
                "less Test.java < "+args[0] + " > "+args[0]});
        System.out.println("=> "+p.waitFor());
    }
}
Run Code Online (Sandbox Code Playgroud)

要运行它,您应该使用java Test $(tty). 该tty程序打印连接到其标准输入的终端的名称。

我不太确定这个解决方案的可移植性;至少它可以在 Linux 上运行。