2014-01-16 5 views
1

JAVA 보조 교사로서 많은 학생들의 실험실을 채점하는 데 어려움을 겪습니다. 이러한 실습실에서는 스캐너를 사용하여 사용자로부터 입력을받습니다. 키보드에 반복되는 숫자를 반복하는 대신에 학생 코드를 변경하지 않고 동일한 입력 매개 변수로 모든 실험실을 실행하기 위해 heredoc을 활용할 수있는 방법이 있습니까? 지금까지합니다 (히어 닥 - 억양 코드를 제외하고 작동하는)이 무엇 :bash 명령 줄에서 Java 용 Heredoc

#!/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 

I 학년에 노력하고있어 코드는 사용자가 제공하는 세 개의 정수를 추가합니다. 가 보내드립니다 제외

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 
+0

는 여기에 문제가 무엇입니까 -문서? 입력 피드 만 필요하거나 앱 출력을 기반으로 입력을 변경해야합니까? –

+0

실습 과제를 수정할 수 없습니다. 내 오류가 자바에서 원래 게시물을 편집하고 있습니다. – voltnor

답변

4

귀하 히어 닥 좋아 보인다 : 압축 해제는

자바 준다 (예 : 파일 구조가 ./unzip/student/lab0/sourcecode.java가) 각 학생의 폴더가있는 디렉토리입니다 각 줄의 시작 부분에 공백이 있어야합니다. 그 제거하려면 -EOF를 사용하여 제거 얻을 것이다 문자로 히어 닥의 각 라인을 시작할 수 있습니다 :

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

또는 히어 닥 내용을내어 쓰. 못생긴 것이지만 작동 할 것입니다. 입력이 충분히 짧은 경우

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

다른 방법으로는 인라인을 할 수있는 :

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

($'...'를 사용하여 \n 이스케이프 시퀀스를 해석하는 쉘을 말한다.)

+0

나는 전에 '<<<'연산자를 본 적이 없다 ... 무엇입니까? – iamnotmaynard

+0

@iamnotmaynard - [여기 bash string] (http://www.gnu.org/software/bash/manual/bashref.html#Here-Strings) –

+0

이것은 here-string입니다. '<<< word' * "단어가 확장되어 명령에 표준 입력으로 제공됩니다."* –

관련 문제