2014-01-16 25 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 

我試圖級的代碼添加由用戶提供的三個整數。解壓縮是每個學生都有一個文件夾的目錄(即文件結構./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 
+0

什麼是與這裏的問題-文件?您是否只需要提供輸入或您是否還需要根據應用輸出更改輸入? –

+0

我無法修改實驗室作業。我正在編輯與我的錯誤來自Java的原始帖子。 – voltnor

回答

4

你定界符看起來不錯,但它會發送每行開始處的空格。爲了擺脫這些,你既可以使用-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' 

(使用$'...'告訴shell解釋\n轉義序列。)

+0

我以前從來沒有見過'<<<'操作符...它是什麼? – iamnotmaynard

+0

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

+0

這是一個here-string。 '<<< word' *「該單詞被擴展並提供給其標準輸入的命令。」* –