首页 > 解决方案 > 如何从控制台将无限流(bash)转换为java args?

问题描述

考虑以下java程序:

class PrintName{
    public static void main(String[] args){
        System.out.println("Hi " + args[0]);
    }
}

现在我只是从控制台编译并执行它(我在 Ubuntu 服务器上):

~$:javac PrintName.java
~$:java PrintName "Fernando"

我得到下一个输出:

Hi Fernando

我知道 Linux 中有类似“yes”之类的命令,我可以使用这些命令获得无限的数据流。我的想法是做这样的事情:

yes "Fernando" | java PrintName >> my_file.txt

我希望能够将“无限”费尔南多传递给我的程序并让它无限运行多次,然后能够操纵 STDO 重定向到某个文件。

我不知道我是否解释清楚,抱歉我对英语的处理不好。非常感谢您的宝贵时间。

标签: javalinuxbashshellstdout

解决方案


这是您想要命令的地方:

yes Fernando | xargs java PrintName

xargs 获取标准输入的每一行,并将其作为命令行参数传递给给定的命令。

要将其重定向到文件,您可以将其包装在分组构造中:

{ yes Fernando | xargs java PrintName; } >> my_file.txt

推荐阅读