1: #!/bin/sh
2: # Look for program[s] somewhere in $PATH.
3: #
4: # Options:
5: # -s
6: # Do not print out full pathname. (silent)
7: # -pPATHNAME
8: # Look in PATHNAME instead of $PATH
9: #
10: # Usage:
11: # PrintPath [-s] [-pPATHNAME] program [program ...]
12: #
13: # Initially written by Jim Jagielski for the Apache configuration mechanism
14: # (with kudos to Kernighan/Pike)
15: #
16: # This script falls under the Apache License.
17: # See http://www.apache.org/licenses/LICENSE
18:
19: ##
20: # Some "constants"
21: ##
22: pathname=$PATH
23: echo="yes"
24:
25: ##
26: # Find out what OS we are running for later on
27: ##
28: os=`(uname) 2>/dev/null`
29:
30: ##
31: # Parse command line
32: ##
33: for args in $*
34: do
35: case $args in
36: -s ) echo="no" ;;
37: -p* ) pathname="`echo $args | sed 's/^..//'`" ;;
38: * ) programs="$programs $args" ;;
39: esac
40: done
41:
42: ##
43: # Now we make the adjustments required for OS/2 and everyone
44: # else :)
45: #
46: # First of all, all OS/2 programs have the '.exe' extension.
47: # Next, we adjust PATH (or what was given to us as PATH) to
48: # be whitespace separated directories.
49: # Finally, we try to determine the best flag to use for
50: # test/[] to look for an executable file. OS/2 just has '-r'
51: # but with other OSs, we do some funny stuff to check to see
52: # if test/[] knows about -x, which is the preferred flag.
53: ##
54:
55: if [ "x$os" = "xOS/2" ]
56: then
57: ext=".exe"
58: pathname=`echo -E $pathname |
59: sed 's/^;/.;/
60: s/;;/;.;/g
61: s/;$/;./
62: s/;/ /g
63: s/\\\\/\\//g' `
64: test_exec_flag="-r"
65: else
66: ext="" # No default extensions
67: pathname=`echo $pathname |
68: sed 's/^:/.:/
69: s/::/:.:/g
70: s/:$/:./
71: s/:/ /g' `
72: # Here is how we test to see if test/[] can handle -x
73: testfile="pp.t.$$"
74:
75: cat > $testfile <<ENDTEST
76: #!/bin/sh
77: if [ -x / ] || [ -x /bin ] || [ -x /bin/ls ]; then
78: exit 0
79: fi
80: exit 1
81: ENDTEST
82:
83: if `/bin/sh $testfile 2>/dev/null`; then
84: test_exec_flag="-x"
85: else
86: test_exec_flag="-r"
87: fi
88: rm -f $testfile
89: fi
90:
91: for program in $programs
92: do
93: for path in $pathname
94: do
95: if [ $test_exec_flag $path/${program}${ext} ] && \
96: [ ! -d $path/${program}${ext} ]; then
97: if [ "x$echo" = "xyes" ]; then
98: echo $path/${program}${ext}
99: fi
100: exit 0
101: fi
102:
103: # Next try without extension (if one was used above)
104: if [ "x$ext" != "x" ]; then
105: if [ $test_exec_flag $path/${program} ] && \
106: [ ! -d $path/${program} ]; then
107: if [ "x$echo" = "xyes" ]; then
108: echo $path/${program}
109: fi
110: exit 0
111: fi
112: fi
113: done
114: done
115: exit 1
116:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>