From a8aeed388f90fa3cdc9a2efcafe56322f6bb2795 Mon Sep 17 00:00:00 2001 From: Iain Patterson Date: Thu, 13 Jun 2013 10:28:25 +0100 Subject: [PATCH] Tidyup. Don't treat -? as a glob. Print options in alphabetical order. Use \b instead of space to match the program name. --- opt/bin/find_working | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/opt/bin/find_working b/opt/bin/find_working index cec62fa..77bf17e 100755 --- a/opt/bin/find_working +++ b/opt/bin/find_working @@ -2,8 +2,8 @@ # # find_working: Find a version of some tool in the PATH which actually runs. # Usage: find_working [options] -# Options: -a Use arguments to test executable files. Default --help. -# -A Don't test arguments to executable files. +# Options: -A Don't test arguments to executable files. +# -a Use arguments to test executable files. Default --help. # -q Don't print path to prog. Just exit 0 if found. # -x Don't try to execute unreadable files. Assume success. # -X Don't try to execute unreadable files. Assume failure. @@ -12,10 +12,10 @@ args="-h -? --help" quiet=0 unreadable= -while getopts ":a:AqxX" opt; do +while getopts ":Aa:qxX" opt; do case $opt in - a) args="$OPTARG";; A) args="";; + a) args="$OPTARG";; q) quiet=1;; x) unreadable=0;; X) unreadable=1;; @@ -26,28 +26,31 @@ shift $((OPTIND-1)) prog="$1"; shift if [ -z "$prog" ]; then echo >&2 "Usage: find_working [options] " - echo >&2 "Options: -a Use arguments to test executable files. Default --help." - echo >&2 " -A Don't test arguments to executable files." + echo >&2 "Options: -A Don't test arguments to executable files." + echo >&2 " -a Use arguments to test executable files. Default --help." echo >&2 " -q Don't print path to prog. Just exit 0 if found." echo >&2 " -x Don't try to execute unreadable files. Assume success." echo >&2 " -X Don't try to execute unreadable files. Assume failure." exit 1 fi +# Default args contain -? which might be interpreted as a glob. +set -o noglob + ret= for path in ${PATH//:/ }; do [ -x "$path/$prog" ] || continue if [ -r "$path/$prog" ]; then if [ -n "$args" ]; then - "$path/$prog" $args 2>&1 | grep " $prog " >/dev/null || continue + "$path/$prog" $args 2>&1 | grep "\\b$prog\\b" >/dev/null || continue else ldd "$path/$prog" 2>/dev/null | grep "not found" >/dev/null && continue fi ret="$path/$prog" break elif [ -z "$unreadable" ]; then - "$path/$prog" $args 2>&1 | grep " $prog " >/dev/null || continue + "$path/$prog" $args 2>&1 | grep "\\b$prog\\b" >/dev/null || continue ret="$path/$prog" break elif [ $unreadable = 0 ]; then -- 2.7.4