From a11035440c30eda5b14118694f6f9aa15c0105ea Mon Sep 17 00:00:00 2001 From: Mathias Gumz Date: Mon, 25 Apr 2016 20:11:14 +0200 Subject: fix fbsetbg in combination with picky shells in *BSD, /bin/sh is Almquist Shell(ash). the 'hash' built-in command of ash returns 0, always. 'hash' is not usable for find_it() function in util/fbsetbg and util/fluxbox-generate_menu.in. this patch changes the behavior of find_it(): when 'hash' is detected to not work correctly, switch back to 'which'. this patch is the work of Yamashiro, Jun and appeared first as patch-160 on sourceforge: https://sourceforge.net/p/fluxbox/patches/160/. i submit it on behalf of the author. --- util/fbsetbg | 17 ++++++++++++++--- util/fluxbox-generate_menu.in | 29 ++++++++++++++++++++++------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/util/fbsetbg b/util/fbsetbg index 17c2efe..0cf9cfb 100644 --- a/util/fbsetbg +++ b/util/fbsetbg @@ -133,9 +133,20 @@ Common tips to use with $command: EOF } -find_it() { - [ -n "$1" ] && hash $1 2> /dev/null -} +# some shell's hash returns 0 always +if hash this_program_does_not_exist-no_really-aA1zZ9 > /dev/null 2>&1; then + # can't rely on return value + # ash / ksh + find_it() { + which "$1" > /dev/null 2>&1 + } +else + # can rely on return value + # bash / dash / zsh / sh on Solaris + find_it() { + [ -n "$1" ] && hash "$1" 2> /dev/null + } +fi message() { diff --git a/util/fluxbox-generate_menu.in b/util/fluxbox-generate_menu.in index 085d622..d319098 100755 --- a/util/fluxbox-generate_menu.in +++ b/util/fluxbox-generate_menu.in @@ -145,13 +145,28 @@ testoption() { esac } -find_it() { - [ -n "$1" ] && hash $1 2> /dev/null && shift && "$@" -} +# some shell's hash returns 0 always +if hash this_program_does_not_exist-no_really-aA1zZ9 > /dev/null 2>&1; then + # can't rely on return value + # ash / ksh + find_it() { + which "$1" > /dev/null 2>&1 && shift && "$@" + } -find_it_options() { - [ -n "$1" ] && hash $1 2> /dev/null -} + find_it_options() { + which "$1" > /dev/null 2>&1 + } +else + # can rely on return value + # bash / dash / zsh / sh on Solaris + find_it() { + [ -n "$1" ] && hash "$1" 2> /dev/null && shift && "$@" + } + + find_it_options() { + [ -n "$1" ] && hash "$1" 2> /dev/null + } +fi #echo "replaceWithinString: $1, $2, $3" >&2 #echo ${1//$2/$3} # causes error in BSD even though not used @@ -203,7 +218,7 @@ convertIcon(){ if [ -f "${entry_icon}" ]; then : echo "File exists. To overwrite, type: convert \"$1\" \"$entry_icon\"" >&2 else - if hash convert 2> /dev/null; then + if find_it_options convert; then convert "$1" "$entry_icon" # echo convert "$1" , "$entry_icon" >> $ICONMAPPING else -- cgit v0.11.2