Script assistente do assistente de ensino para automatizar o processo de localizar, compilar e executar arquivos .java [closed]

1

Aqui está uma cópia do meu código atual:

#!/bin/bash
list="/Users/ajm/Desktop/170Grading/output/list.txt"
score="/Users/ajm/Desktop/170Grading/output/score.txt"
echo "" > list
echo "" > score
find $1 -name '*.java'>> list
exec 3<list
while IFS='' read -r -u 3 line || [[ -n "$line" ]];
    do
    # read -p "> $line (Press Enter to continue)"
    echo "the next file is $line" >> score 
    # open -a "Xcode" "$line" 
    ((javac -d "/Users/ajm/Desktop/170Grading/runs" "$line")  && (echo compiled >> score)) || ((echo not compiled) >> score) 
    echo "" | cd "/Users/ajm/Desktop/170Grading/runs" java "$line" >> score
done 

Quando os alunos enviaram seus arquivos para avaliação, baixei um arquivo .zip do site do curso. Eu descompactei este arquivo em uma pasta pai em minha área de trabalho chamada 170Grading .

Nesta pasta 170Grading pai, há duas subpastas adicionais, essas subpastas são chamadas de saída e são executadas.

Meu primeiro objetivo é extrair o caminho de cada arquivo de classe neste diretório pai 170Grading e adicioná-lo a um arquivo. Então eu gostaria de compilar cada arquivo .java para um arquivo .class. Por fim, gostaria de executar esses arquivos .class com uma entrada padrão e gravar a saída em um arquivo de texto.

Eu gostaria de executar cada arquivo um de cada vez para que eu possa examinar a submissão do código dos alunos e anotar quaisquer escolhas ou lugares estranhos em que haja espaço para melhorias.

Atualmente, o script pode, corretamente, localizar todos os arquivos .java e colocá-los no arquivo list.txt. As linhas:

# read -p "> $line (Press Enter to continue)"
echo "the next file is $line" >> score 
# open -a "Xcode" "$line"  

também funciona corretamente. Infelizmente, as duas últimas linhas do meu código não estão conseguindo fazer o que eu quero e provavelmente precisam ser revisadas. O código não é compilado corretamente e, portanto, a última linha também não produz nada. Eu reconheço que não posso usar "$ line" na segunda para as últimas linhas do meu código, porque quando o código foi compilado, o caminho /path/to/this/example.java se torna example.class.

    
por Allan J Miller 18.09.2018 / 01:51

1 resposta

0

Há muitos erros no script para eu revisar.

Eu poderia até criar espaço para mais erros, infelizmente.

Vamos dar uma olhada em um código mais plausível , talvez ajude você a corrigir:

#!/bin/bash

list='/Users/ajm/Desktop/170Grading/output/list.txt'
score='/Users/ajm/Desktop/170Grading/output/score.txt'

echo "" > "$list"
echo "" > "$score"

find "$1" -name '*.java' >> "$list"

exec 3< "$list"

while IFS='' read -r -u 3 line || [ -n "$line" ]
do

    read -p "> $line (Press Enter to continue)"

    echo "the next file is $line" >> "$score"

    open -a "Xcode" "$line" 

    javac -d "/Users/ajm/Desktop/170Grading/runs" "$line" && echo compiled >> "$score" || echo not compiled >> "$score"

    echo cd "/Users/ajm/Desktop/170Grading/runs" java "$line" >> "$score"

done
    
por 18.09.2018 / 03:23