]>
Commit | Line | Data |
---|---|---|
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 |