java - 来自 bash 命令行的 Java Heredoc

标签 java bash heredoc

作为一名 JAVA 助教,我经常要给很多学生的实验评分。许多这些实验室使用扫描仪从用户那里获取输入。有没有一种方法可以利用 heredoc 在不更改学生代码的情况下使用相同的输入参数运行所有实验室,而不是重复地将数字输入键盘?到目前为止我所拥有的(除了 heredoc-esque 代码外,它都适用):

    #!/bin/bash

    for i in unzip/*; do
      echo $i
      javac $i/lab0/AddThree.java
      cd $i/lab0
      java AddThree <<EOF
        2
        3
        4
      EOF
      cd ../../..
    done

我尝试评分的代码添加了用户提供的三个整数。 unzip是每个学生都有一个文件夹的目录(即文件结构是./unzip/student/lab0/sourcecode.java)

Java 提供:

    unzip/student
    Hello out there
    I will add three numbers for you
    Enter three whole numbers on a line : 
    Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:909)
        at java.util.Scanner.next(Scanner.java:1530)
        at java.util.Scanner.nextInt(Scanner.java:2160)
    at java.util.Scanner.nextInt(Scanner.java:2119)
    at AddThree.main(AddThree.java:10)
    ./lab0test: line 9: 2: command not found
    ./lab0test: line 10: 3: command not found
    ./lab0test: line 11: 4: command not found
    ./lab0test: line 12: EOF: command not found

最佳答案

你的 heredoc 看起来不错,除了它会在每行的开头发送空格。要摆脱这些,您可以使用 -EOF 并以 Tab 字符开始 heredoc 的每一行,这些字符将被删除:

      cd $i/lab0
      java AddThree <<-EOF
<kbd>Tab</kbd><kbd>Tab</kbd>2
<kbd>Tab</kbd><kbd>Tab</kbd>3
<kbd>Tab</kbd><kbd>Tab</kbd>4
<kbd>Tab</kbd><kbd>Tab</kbd>EOF
      cd ../../..

或者取消缩进 heredoc 的内容。这很丑陋,但它会起作用。

      cd $i/lab0
      java AddThree <<EOF
2
3
4
EOF
      cd ../../..

或者,如果输入足够短,您可以内联:

java AddThree <<< $'2\n3\n4'

(使用 $'...' 告诉 shell 解释 \n 转义序列。)

关于java - 来自 bash 命令行的 Java Heredoc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21174044/

相关文章:

c++ - 将 NS3 返回/退出代码(通过 waf)捕获为 Bash 脚本中的变量

linux - bash echo stars or hashes 基于特定的数字

bash - 如何在 bash heredocs 中抑制变量替换

linux - 如何使用 commhe 和 line 为 whiptail 提供输入

java - Junit前提条件和测试数据

java - 在android中的tabhost中添加滚动

java - 如何以可靠的方式编写/更新 Oracle blob?

java - 使用对称/预共享 key 的安全通信是否发生在普通套接字或 SSLSocket 上是否重要?如何?

python - 将标准输出重定向到不起作用的文件

php - div的onclick需要删除一条mysql数据库记录