#!/bin/sh CACHE=$HOME/.dmenu_cache IFS=: uptodate() { test -f "$CACHE" && for dir in $PATH do test ! $dir -nt "$CACHE" || return 1 done } if ! uptodate then for dir in $PATH do cd "$dir" && for file in * do test -x "$file" && echo "$file" done done | sort | uniq > "$CACHE".$$ && mv "$CACHE".$$ "$CACHE" fi cat "$CACHE"