rm -f a a.ran a.final b b.ran *.[123] dir/*.[123] mkdir -p dir reads() { aold=$aval bold=$bval read aval >a.final ../flush-cache redo-ifchange b reads [ "$aold" != "$aval" ] || exit 14 [ "$bold" != "$bval" ] || exit 114 # We should also notice if a.final is removed. # Now a is a "dangling" symlink. rm -f a.final ../flush-cache redo-ifchange b reads [ "$aold" != "$aval" ] || exit 15 [ "$bold" != "$bval" ] || exit 115 # If the symlink becomes no-longer-dangling, that should be dirty too. echo "splash" >a.final ../flush-cache redo-ifchange b reads [ "$aold" != "$aval" ] || exit 16 [ "$bold" != "$bval" ] || exit 116 # We ought to know the difference between a, the symlink, and its target. # If a is replaced with a.final directly, that's a change. rm -f a mv a.final a ../flush-cache redo-ifchange b >/dev/null 2>&1 # hide "you changed it" message reads [ "$aold" = "$aval" ] || exit 17 # manual override prevented rebuild [ "$bold" != "$bval" ] || exit 117