2017-11-18 25 views
0

初心者はここで私と一緒にいてください。私は解決策ファイルと学生提出ファイルから宿題の提出を比較しようとしています。ネストされたwhileループはBashで動作しません

problem 1 code 
problem 2 code 
problem 3 code 

私は学生の提出の対応する行と溶液中でそれぞれの行を比較する:各ファイルの内容は三つの問題、1行に1つずつ持っています。私はforループを使用して各生徒ファイルと入れ子のwhileループを実行し、解ファイルと生徒ファイルの各行を実行しています。何らかの理由で、スクリプトはwhileループを完全に無視しています。私は(エコー$液とエコー$の提出だけでパスが正しいかどうかを確認することです)、問題がどこにあるか確認するために、各ライン間のエコーを入れている:

for submission in /home/myfolder/submissions/* 

    do 
    echo 1 
    solution=$(echo /home/myfolder/hwsolution/*) 
    echo 2 
    echo $solution 
    echo $submission 
      while read sans <&1 && read sol <&2 
      do 
    echo 3 
      echo Student awnser is: $sans 
      echo Solution is: $sol 
    echo 4 
      done 1<$(echo $submission) 2<$(echo $(echo $solution)) 
    echo 5 
done 

私はそれを実行すると、私が手:

1 
2 
/home/myfolder/hwsolution/solution 
/home/myfolder/submissions/student1 
5 
1 
2 
/home/myfolder/hwsolution/solution 
/home/myfolder/submissions/student2 
5 
1 
2 
/home/myfolder/hwsolution/solution 
/home/myfolder/submissions/student3 
5 
+0

コードにネストされたwhileループはありません。投稿する出力が期待する出力にどのように関係しているのかは不明です。 –

+0

また、 '1 $(echo $ submission)'や '2 $(echo $(echo $ solution))'がどんなに役に立つかは不明です。 (また、ファイル記述子1またはファイル記述子2を入力に使うのは、実際には* stdoutとstderrにそれぞれ予約されているので、*実際は悪い考えです)。 –

+0

...多分*ファイルの内容を読みたいですか?もしそうなら、あなたは '<" $ solution "'を望んでいて、 'echo'はありません。 –

答えて

1

whileループを無視していない - あなたがstdoutとstderrに使用するファイル記述子をリダイレクトしているので、echoは、その中に、コンソールに書き込むことはできません。

for submission in /home/myfolder/submissions/*; do 
    solutions=(/home/myfolder/hwsolution/*) 

    if ((${#solutions[@]} == 1)) && [[ -e ${solutions[0]} ]]; then 
     solution=${solutions[0]} 
    else 
     echo "Multiple solution files found; don't know which to use" >&2 
     printf ' - %q\n' "${solutions[@]}" >&2 
     exit 
    fi 

    while read sans <&3 && read sol <&4; do 
      echo "Student awnser is: $sans" 
      echo "Solution is: $sol" 
    done 3<"$submission" 4<"$solution" 
done 

最も直接的な変更は、当社がFD3とFD4をリダイレクトではなく、FD1とFD2していることです。

+0

home/myfolder/hwsolutionには1つのファイルしかないのに、 "複数のソリューションファイルが見つかりました..."が表示されます。そこには1つのファイルしか存在しません。 – koll

+0

候補を記録する 'printf'を追加したので、ファイルのリストが何であるかを正確に見ることができ、正確に1つのファイル以外のものがある理由/方法を見つけ出すことができます。 –

+0

私はそれが働いたと思う! solutions =(/ home/myfolder/hwsolution/*)で$を削除するのを忘れました。あなたは命の恩人です。では、実際にこのコードは何ですか? &3と&4は分かりません。私は別の投稿からその提案を受けましたが、私はクラスでそれについて学んでいません。 – koll

関連する問題