Thread: Jak podrasować ocen.sh

Chciałbym podzielić się moimi zmianami w skrypcie oceniającym na Linuxie.
Dodałem wyszukiwanie testów w pliku 'oi.conf'. Zamieniłem:
TASKS="nww pis pom prz ukl"
TESTS_pom="0 1 2 3"
...
na:

##
TASKS="nww pis pom prz ukl"
find_tests()
{
varvalue=$(find in -name "$1$2*" | awk 'BEGIN {FS="[/.]"} {print substr($2,4)}' | sort -g)
eval "TESTS_$1='$varvalue'"
}
for i in $TASKS; do
find_tests $i;
done
##

W pliku 'ocen' dodałem możliwość uruchomienia skryptu tylko na zadaniach zaczynających się danym ciągiem np. `./ocen ukl_a_`:

Za liniami (33-36):
TASK="$1"
TEST="$2"
OPT="$3"

Dopisałem:
##
if [ `printf "$TASK" | wc --chars` -ge 4 ] ; then
TEST_PREFIX=`printf "$TASK" | cut -c 4- -`
TASK=`printf "$TASK" | cut -c -3 -` # pierwsze 3 znaki
# Zadanie:
printf " Grupa testow \x1b[36m$TEST_PREFIX\x1b[0m\n"
find_tests $TASK $TEST_PREFIX
fi
##

Mógłby ktoś sprawdzić, czy łatka zadziała na innym systemie niż Arch Linux z powłoką bash?
Dziękować za świetne usprawnienia Jędzrzeju
Osobiście dodałem taki fragment aby ukryć wyniki "OK", co pomaga przy dużych zestawach testów:

[user@personal-dev oi]$ diff -u ocen-linux/ocen ocen/ocen
--- ocen-linux/ocen 2017-10-12 22:38:47.000000000 +0200
+++ ocen/ocen 2019-11-14 21:13:14.302000000 +0100
@@ -191,10 +191,12 @@
TST_RES="BLAD WYKONANIA (KOD $RUN_RES)"
fi

- printf "$TST_RES\n"
+ printf "$TST_RES"
if [ "$OPT" != "quiet" ] ; then
if [ -n "$CHK_TXT" -a "$TST_RES" != "OK" ] ; then
- echo " >> $CHK_TXT"
+ printf "\n >> %s\n" "$CHK_TXT"
+ else
+ printf "\r\e[K"
fi
fi
Ja rozumieć tylko c++