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.

Reply via email to