【发布时间】:2019-02-22 00:25:45
【问题描述】:
背景:
我在https://unix.stackexchange.com/questions/469680/teaching-assistant-bash-script-to-automate-the-process-of-finding-compiling-an 上发布了一个问题,并收到了一些非常好的建议。现在我想把我的过程更进一步。
设计概要:
我是一名大学助教,希望自动测试我学生的 Java 代码。我也在利用这个机会来提高我的 bash 技能,因为我觉得他们可以做得更好。我当前的 bash 脚本如下所示:
#!/bin/bash
list='/Users/ajm/Desktop/170Grading/output/list.txt'
score='/Users/ajm/Desktop/170Grading/output/score.txt'
> "$list"
> "$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" >> class && echo compiled >> "$score" || echo not compiled >> "$score"
echo "standard in string" | cd "/Users/ajm/Desktop/170Grading/runs" java "$class" >> "$score"
done
争论点
目前,一切正常,直到完成前的最后一行。出于某种奇怪的原因,java "$class" 的输出没有附加到 "$score"。任何指导将不胜感激。
其他目标
A) 我希望能够为我的脚本添加额外的参数,这样我就不需要为每个新任务继续编辑它。例如在:
find "$1" -name '*.java' >> "$list"
我希望能够将 '*.java' 替换为 'string.java'。我知道我可以将字符串作为 $2 作为脚本的命令 arg 获取,但 '$2.java' 似乎不是解决此问题的正确方法。举个例子:假设我只想看一个以 color.java 结尾的 .java 文件的子集,我想说
bash script.sh directory color
并让其执行任务。如果没有$2,代码应该默认为'*.java'。
【问题讨论】:
-
你好。我很高兴你很好地提出了你的问题。干得好!祝你好运。
-
您能否进一步向我们解释一下,最后一行应该输出什么?如果可能,最好举个例子。
-
请更正
javac行中的错误class字和"$class"。
标签: java bash automation