On Sun, Jul 24, 2011 at 5:06 PM, Anselm R Garbe <garb...@gmail.com> wrote: > Nevertheless, I can see that script should be improved (not using the > ls -dt invocation), but I prefer the back ticks (even if $(..) is > POSIX, there were a couple of issues in the past that I barely > remember) and I want explicit test calls, I don't like the [ ... ] > syntax sugar. > > Thanks, > Anselm > >
Fine, as long as it doesn't break anything, I can live with these two backticks. Since I'm the thread starter, may I conclude this with the following? #!/bin/sh CACHE=${XDG_CACHE_HOME:-$HOME/.cache}/dmenu_run ( IFS=: gen_cache() { lsx $PATH | LC_COLLATE=C sort -u > "$CACHE" } if test -e "$CACHE"; then for path in $PATH; do if test "$path" -nt "$CACHE"; then gen_cache break fi done else mkdir -p "${CACHE%/*}" gen_cache fi ) cmd=`dmenu "$@" < "$CACHE"` && eval exec "$cmd" NOTE: The (subshell) is used so the declarations won't get inherented, but the user still has access to the $CACHE and $cmd environments.