带有herdoc的Java命令行输入

带有herdoc的Java命令行输入,java,input,command-line,heredoc,Java,Input,Command Line,Heredoc,我有一个令人沮丧的简单问题:我需要编写一个接受表单输入的程序: cat << EOF | java myProgram.java > 1 2 3 4 > 5 6 7 8 > etcetera > EOF cat 1 2 3 4 > 5 6 7 8 >等等 >EOF 但是当我尝试在main()中使用args[]执行任何操作时,它总是空的。即使是cat也要使用: 您没有向程序提供任何参数,因此当然args[]为空 您可以从中的系统读取heredoc 您似乎对参

我有一个令人沮丧的简单问题:我需要编写一个接受表单输入的程序:

cat << EOF | java myProgram.java
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF
cat 1 2 3 4
> 5 6 7 8
>等等
>EOF
但是当我尝试在main()中使用args[]执行任何操作时,它总是空的。即使是
cat也要使用:


您没有向程序提供任何参数,因此当然
args[]
为空

您可以从
中的系统读取heredoc

您似乎对参数(
args[]
)和
stdin
System.in
)之间的区别感到困惑

echo
将其参数(
args[]
)写入
stdout
,例如:

$ echo foo bar
foo bar
cat
将其
stdin
System.in
)写入
stdout
,例如:

$ cat << EOF
> foo bar
> EOF
foo bar

您的
cat代码不是问题所在-它只是访问输入。下面是代码:
publicstaticvoidmain(stringargs[]){for(stringline:args){System.out.println(line);}
这不会输出任何东西,因为args[]是一个空列表。我知道如何使用所有这些细节-我正在编写的程序需要以这种形式输入,因为它将使用自动数据输入进行计算。啊,我明白了;就像我在下面说的,这个问题是因为我不知道我的程序是如何访问heredoc的。感谢您的解释-我以前从未见过cat以这种方式使用,但这正是我需要处理的。我陷入了困惑,因为我认为连接的herdoc会在
java MyProgram
调用之后立即作为命令行参数输入到命令行,而不是通过管道输入到标准in。如果需要将它们作为参数,只需将它们作为参数提供即可。一定要简单得多。或者使用
xargs
,它接受
stdin
,并将其用作其他对象的参数。
$ cat << EOF
> foo bar
> EOF
foo bar
$ echo foo bar | cat     # Useless use of cat
foo bar
$ java myProgram.java << EOF
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF