File: PrintPath

package info (click to toggle)
apache 1.3.3-7
  • links: PTS
  • area: main
  • in suites: slink
  • size: 6,508 kB
  • ctags: 6,595
  • sloc: ansic: 50,060; sh: 3,776; perl: 1,354; makefile: 234; cpp: 55
file content (104 lines) | stat: -rwxr-xr-x 2,045 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/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 ...]
#
# Blame Jim; he wrote it.
#
# 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 seperated 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 [ "$echo" = "yes" ]; then
		echo $path/${program}${ext}
	    fi
	    exit 0
	fi
    done
done
exit 1