来自bash命令行的Java的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/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并使用制表符开始 heredoc 的每一行,这些字符将被剥离:

      cd $i/lab0
      java AddThree <<-EOF
TabTab2
TabTab3
TabTab4
TabTabEOF
      cd ../../..

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

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

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

java AddThree <<< $'2n3n4'

(使用 $'...' 告诉外壳解释n转义序列。

相关内容

  • 没有找到相关文章

最新更新