如何将流重定向到简单的 Java 应用程序?

How to redirect a stream to simple Java application?

我有一个文件data.txt。其内容为:

a b c
d e f

我也有Java代码

public class Main {
    public static void main(String[] args) {
        System.out.println("size: " + args.length);
        for (String arg : args) {
            System.out.println("arg: " + arg);
        }
    }
}

还有一个脚本run:

#!/bin/bash
java -jar test.jar "$@"

我想将文件作为流重定向到我的应用程序。

我尝试了以下方法:

cat data.txt | ./run

哪个给了我:

size: 0

但我想看:

size: 6
a
b
c
d
e
f

我怎样才能做到这一点?

您可以调用 with xargs 将 stdin 的内容与命令行连接起来:

cat data.txt | xargs ./run

根据 $IFS 的值,这可能等同于:

./run a b c d e f