Ввод командной строки Java с помощью heredoc - PullRequest
2 голосов
/ 13 июля 2011

У меня очень простая проблема: мне нужно написать программу, которая принимает ввод в форме:

cat << EOF | java myProgram.java
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF

Но мои аргументы [] всегда пусты, когда я пытаюсь что-то с ними сделать в main (). Даже cat << EOF | echo с последующим вводом не производит никакого вывода на терминале. Что я тут не так делаю?

Ответы [ 2 ]

3 голосов
/ 13 июля 2011

Использовать стандартный поток ввода :

public static void main(String[] args) throws Exception {
  InputStreamReader inputReader = new InputStreamReader(System.in);
  BufferedReader reader = new BufferedReader(inputReader);
  String line = null;
  while ((line = reader.readLine()) != null) {
    System.out.println(line);
  }
  reader.close();
  inputReader.close();
}
2 голосов
/ 13 июля 2011

Вы не предоставили никаких аргументов программе, поэтому, конечно, args[] пусто.

Вы можете прочитать heredoc из System.in.

Вы, кажется, смущены разницей между аргументами (args[]) и stdin (System.in).

echo записывает свои аргументы (args[]) в stdout, например:

$ echo foo bar
foo bar

cat записывает свои stdin (System.in) в stdout, например ::

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

или

$ echo foo bar | cat     # Useless use of cat
foo bar

Ваш пример cat << EOF | echo не работает, потому что echo не читает stdin.

Кроме того, использование cat бесполезно. Вы можете просто написать

$ java myProgram.java << EOF
> 1 2 3 4
> 5 6 7 8
> etcetera
> EOF
...