#!/bin/bash label_dir="/var/www/komarix.org/paul_blogger/labels" echo "Content-type: text/html" echo echo "" echo "" # I use env vars to communicate with the while-loop below, because # the while-loop is excecuted in a sub-shell (due to the pipe). export LABEL_SEPARATOR=", " # Controls use of label-separator. export FIRST_ITEM=1 # Used for line-breaking. export ACCUMULATOR="" export MAX_CHARS=35 export NUM_CHARS=0 # We cannot return values in the accumulator, and the while-loop # does not know which item is the last in the list. Therefore we # include a marker for the end of the list. export ENDOFLIST="ENDOFLIST_MARKER" (ls ${label_dir}/*.html; echo $ENDOFLIST) \ | while read label_file; do if [ "$label_file" = "$ENDOFLIST" ]; then echo "${ACCUMULATOR}
" break; fi bname=$(basename "$label_file" .html) if [ -z "$bname" ]; then continue; fi escbname=$(echo "$bname" | sed 's: :%20:g') lname="http://notes.komarix.org/labels/${escbname}.html" # Number of posts for this label. count=$(grep '' "$label_file" | wc -l) # Create the link text. link_text="${bname} ($count)" # Create the html markup. markup="${link_text}" # Line breaking. textlen=$(echo "$link_text" | wc -c) newlen=$(($NUM_CHARS + $textlen)) if [ "$newlen" -le "$MAX_CHARS" ]; then # There's room on this line. # Add a preceding comma if we are not the first item on this line. if [ "$FIRST_ITEM" -eq 0 ]; then markup="${LABEL_SEPARATOR}${markup}" fi export FIRST_ITEM=0 export ACCUMULATOR="${ACCUMULATOR}${markup}" export NUM_CHARS="$newlen" else # Not enough room on this line. echo "${ACCUMULATOR}
" export ACCUMULATOR="$markup" export NUM_CHARS="$textlen" fi done # Dump final accumulator string. if [ -n "$ACCUMULATOR" ]; then echo "${ACCUMULATOR}
" fi echo "" echo ""