Fixed argument handling in find_working.
authorIain Patterson <me@iain.cx>
Tue, 31 Aug 2010 09:39:03 +0000 (10:39 +0100)
committerIain Patterson <me@iain.cx>
Wed, 15 Sep 2010 13:14:31 +0000 (14:14 +0100)
find_working wasn't using the arguments passed with -a when checking if
an executable it found was really working.
Added the -A flag to skip argument checking altogether.

opt/bin/find_working

index cbbd82d..cec62fa 100755 (executable)
@@ -3,6 +3,7 @@
 # find_working: Find a version of some tool in the PATH which actually runs.
 # Usage: find_working [options] <prog>
 # Options: -a <args>   Use arguments to test executable files.  Default --help.
+#          -A          Don't test arguments to executable files.
 #          -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.
 args="-h -? --help"
 quiet=0
 unreadable=
-while getopts ":a:qxX" opt; do
+while getopts ":a:AqxX" opt; do
   case $opt in
     a) args="$OPTARG";;
+    A) args="";;
     q) quiet=1;;
     x) unreadable=0;;
     X) unreadable=1;;
@@ -25,6 +27,7 @@ prog="$1"; shift
 if [ -z "$prog" ]; then
   echo >&2 "Usage: find_working [options] <prog>"
   echo >&2 "Options: -a <args>   Use arguments to test executable files.  Default --help."
+  echo >&2 "         -A          Don't test arguments to executable files."
   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."
@@ -36,7 +39,11 @@ for path in ${PATH//:/ }; do
   [ -x "$path/$prog" ] || continue
 
   if [ -r "$path/$prog" ]; then
-    ldd "$path/$prog" 2>/dev/null | grep "not found" >/dev/null && continue
+    if [ -n "$args" ]; then
+      "$path/$prog" $args 2>&1 | grep " $prog " >/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