#!/bin/sh -eu my_cleanup() { [ -n "${workdir:-}" ] && rm -rf "${workdir}" } trap "my_cleanup" EXIT for sig in INT TERM ; do # We want sig to expand right here and now, as it's # a loop variable, not when signalled. For $$ it # doesn't matter. # shellcheck disable=SC2064 trap "my_cleanup ; trap - EXIT ; trap - ${sig} ; kill -s ${sig} $$" ${sig} done workdir=$(mktemp -d -t onig.ptest.XXXXXX) status="${workdir}/failed" touch "${status}" find tests/ -perm -111 -type f -exec sh -c ' workdir="${1}" status="${2}" t="${3}" t_log="${workdir}/$(basename ${t}).log" res=0 ./${t} > "${t_log}" 2>&1 \ || res=$? if [ $res -eq 0 ] ; then echo "PASS: ${t}" else echo "FAIL: ${t}" echo "$(basename ${t}): ${t_log}" >> "${status}" fi ' _ "${workdir}" "${status}" {} \; if [ $(stat -c '%s' "${status}") -ne 0 ] ; then exec >&2 while IFS=': ' read -r t t_log ; do printf "\n=========================\n" printf "ERROR: %s:\n" "${t}" printf -- "-------------------------\n" cat "${t_log}" done < "${status}" fi [ $(stat -c '%s' "${status}") -eq 0 ]