qcm

Faire des qcm simplement - retour accueil

git clone git://bebou.netlib.re/qcm
Log | Files | Refs | README |

commit 448769d1a885a1d2690b6271d2147bec386882c7
parent 718634381ac5241bd56b84f92375d2625cafeef2
Auteurice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Thu,  7 Nov 2024 11:52:04 +0100

-f pour lire questions préfaites depuis un fichier

Permet de créer des questionnaires à l'avance et de jouer plusieurs
questions à la suite sur le même identifiant

A faire :

  * prévoir un second type de questionnaire étant "libre"
  * permettre de lire les questions dans stdin mais ne pas bloquer pour
    autant s'il n'y a rien dedans ?

Diffstat:
Mqcm.sh | 72+++++++++++++++++++++++++++++++++++++++++++++---------------------------
1 file changed, 45 insertions(+), 27 deletions(-)

diff --git a/qcm.sh b/qcm.sh @@ -18,9 +18,46 @@ usage() <<-. cat qcm -l /var/log/httpd/logs . -while getopts "hl:u:n:r:" opt; do +playout() { + <<-. cat + url : $url/$id + + $([ -n "$title" ] && printf "%s" "$title") + + $([ -n "$file" ] && printf "%s" "$opts" || printf "%s" "$opts" | tr -d '\n ') + + $dat + + total : $tot + . +} + +demander() { + possibleanswers="ABCDEFGHIJQLMNOPQRSTUVWXYZ" + [ -n "$options" ] && nbq=$(( $(echo "$options" | grep -o '~' | wc -l) + 1 )) + echo "$possibleanswers" | grep -o '.' | head -n$nbq > $tmpd/o + answers=$(cat $tmpd/o | tr -d '\n') + + tail -fn0 "$logs" | stdbuf -oL grep -E "GET /$id/[$answers]" >> $tmpd/in & + tailpid=$! + + while :;do + dat=$(< $tmpd/in sort -u -k1,1 | cut -d ' ' -f7 | cut -d'/' -f3 | sort | uniq -c | sort -rn) + [ -n "$dat" ] && tot=$(( $(echo "$dat" | awk '{print $1}' | paste -s -d+ -) )) + opts=$(echo "$options" | tr '~' '\n' | paste $tmpd/o -) + clear + playout + sleep $refresh + done & + disppid=$! + + read a + kill $disppid $tailpid;rm $tmpd/in +} + +while getopts "hl:u:n:r:f:" opt; do case $opt in - ( l | u | n | r ) [ ! -z $OPTARG ] && eval "$opt='$OPTARG'" ;; + ( l | u | n | r | f ) [ ! -z $OPTARG ] && eval "$opt='$OPTARG'" ;; ( h ) usage; exit ;; esac done @@ -29,36 +66,17 @@ url="${u:-http://bebou.netlib.re}" nbq="${n:-4}" refresh="${r:-1}" logs="${l:-/var/log/nginx/access.log}" +file="$f" -playout() { - <<-. cat - url : $url/$id - answers : $answers - - $dat - - total : $tot - . -} tmpd=$(mktemp -d XXX) id=$(basename "$tmpd") +alias titre:=titre; titre() title="$*" +alias type:=type; type() type="$*" +alias options:=options; options() options="$*" + trap "rm -rf $tmpd;exit" INT TERM trap "kill 0" EXIT -possibleanswers="ABCDEFGHIJQLMNOPQRSTUVWXYZ" -answers=$(echo "$possibleanswers" | sed -E "s/(.{$nbq}).*/\1/") - -tail -fn0 "$logs" | - stdbuf -oL grep -E "GET /$id/[$answers]" >> $tmpd/in & - -while :;do - dat=$(< $tmpd/in sort -u -k1,1 | cut -d ' ' -f7 | cut -d'/' -f3 | sort | uniq -c | sort -rn) - [ -n "$dat" ] \ - && tot=$(( $(echo "$dat" | awk '{print $1}' | paste -s -d+ -) )) - clear - playout - sleep $refresh -done - +[ -n "$file" ] && . "$file" || demander