|
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 seperated 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 prefered 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 |