1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#!/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 -u > "$CACHE".$$ && mv "$CACHE".$$ "$CACHE" fi cat "$CACHE"