| #!/bin/sh | |
| # Look for program[s] somewhere in $PATH. | |
| # | |
| # Options: | |
| # -s | |
| # Do not print out full pathname. (silent) | |
| # -pPATHNAME | |
| # Look in PATHNAME instead of $PATH | |
| # | |
| # Usage: | |
| # PrintPath [-s] [-pPATHNAME] program [program ...] | |
| # | |
| # Initially written by Jim Jagielski for the Apache configuration mechanism | |
| # (with kudos to Kernighan/Pike) | |
| # | |
| # This script falls under the Apache License. | |
| # See http://www.apache.org/docs/LICENSE | |
| ## | |
| # Some "constants" | |
| ## | |
| pathname=$PATH | |
| echo="yes" | |
| ## | |
| # Find out what OS we are running for later on | |
| ## | |
| os=`(uname) 2>/dev/null` | |
| ## | |
| # Parse command line | |
| ## | |
| for args in $* | |
| do | |
| case $args in | |
| -s ) echo="no" ;; | |
| -p* ) pathname="`echo $args | sed 's/^..//'`" ;; | |
| * ) programs="$programs $args" ;; | |
| esac | |
| done | |
| ## | |
| # Now we make the adjustments required for OS/2 and everyone | |
| # else :) | |
| # | |
| # First of all, all OS/2 programs have the '.exe' extension. | |
| # Next, we adjust PATH (or what was given to us as PATH) to | |
| # be whitespace separated directories. | |
| # Finally, we try to determine the best flag to use for | |
| # test/[] to look for an executable file. OS/2 just has '-r' | |
| # but with other OSs, we do some funny stuff to check to see | |
| # if test/[] knows about -x, which is the prefered flag. | |
| ## | |
| if [ "x$os" = "xOS/2" ] | |
| then | |
| ext=".exe" | |
| pathname=`echo -E $pathname | | |
| sed 's/^;/.;/ | |
| s/;;/;.;/g | |
| s/;$/;./ | |
| s/;/ /g | |
| s/\\\\/\\//g' ` | |
| test_exec_flag="-r" | |
| else | |
| ext="" # No default extensions | |
| pathname=`echo $pathname | | |
| sed 's/^:/.:/ | |
| s/::/:.:/g | |
| s/:$/:./ | |
| s/:/ /g' ` | |
| # Here is how we test to see if test/[] can handle -x | |
| testfile="pp.t.$$" | |
| cat > $testfile <<ENDTEST | |
| #!/bin/sh | |
| if [ -x / ] || [ -x /bin ] || [ -x /bin/ls ]; then | |
| exit 0 | |
| fi | |
| exit 1 | |
| ENDTEST | |
| if `/bin/sh $testfile 2>/dev/null`; then | |
| test_exec_flag="-x" | |
| else | |
| test_exec_flag="-r" | |
| fi | |
| rm -f $testfile | |
| fi | |
| for program in $programs | |
| do | |
| for path in $pathname | |
| do | |
| if [ $test_exec_flag $path/${program}${ext} ] && \ | |
| [ ! -d $path/${program}${ext} ]; then | |
| if [ "x$echo" = "xyes" ]; then | |
| echo $path/${program}${ext} | |
| fi | |
| exit 0 | |
| fi | |
| # Next try without extension (if one was used above) | |
| if [ "x$ext" != "x" ]; then | |
| if [ $test_exec_flag $path/${program} ] && \ | |
| [ ! -d $path/${program} ]; then | |
| if [ "x$echo" = "xyes" ]; then | |
| echo $path/${program} | |
| fi | |
| exit 0 | |
| fi | |
| fi | |
| done | |
| done | |
| exit 1 | |