PrintPath revision 2d2eda71267231c2526be701fe655db125852c1f
545f1a3ee91056d6de32adab10c2eab26db89f27dpejesh#!/bin/sh
545f1a3ee91056d6de32adab10c2eab26db89f27dpejesh# Look for program[s] somewhere in $PATH.
fd9abdda70912b99b24e3bf1a38f26fde908a74cnd#
fd9abdda70912b99b24e3bf1a38f26fde908a74cnd# Options:
fd9abdda70912b99b24e3bf1a38f26fde908a74cnd# -s
545f1a3ee91056d6de32adab10c2eab26db89f27dpejesh# Do not print out full pathname. (silent)
545f1a3ee91056d6de32adab10c2eab26db89f27dpejesh# -pPATHNAME
545f1a3ee91056d6de32adab10c2eab26db89f27dpejesh# Look in PATHNAME instead of $PATH
5a58787efeb02a1c3f06569d019ad81fd2efa06end#
96ad5d81ee4a2cc66a4ae19893efc8aa6d06fae7jailletc# Usage:
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim# PrintPath [-s] [-pPATHNAME] program [program ...]
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim#
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen# Initially written by Jim Jagielski for the Apache configuration mechanism
2e545ce2450a9953665f701bb05350f0d3f26275nd# (with kudos to Kernighan/Pike)
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen#
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen# This script falls under the Apache License.
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim# See http://www.apache.org/docs/LICENSE
5a58787efeb02a1c3f06569d019ad81fd2efa06end
af33a4994ae2ff15bc67d19ff1a7feb906745bf8rbowen##
3f08db06526d6901aa08c110b5bc7dde6bc39905nd# Some "constants"
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim##
7add1372edb1ee95a2c4d1314df4c7567bda7c62jimpathname=$PATH
5a58787efeb02a1c3f06569d019ad81fd2efa06endecho="yes"
3f08db06526d6901aa08c110b5bc7dde6bc39905nd
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd##
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim# Find out what OS we are running for later on
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim##
00b49f91367894cf867206991ff1373cfeabb759gryzoros=`(uname) 2>/dev/null`
7f5b59ccc63c0c0e3e678a168f09ee6a2f51f9d0nd
e609c337f729875bc20e01096c7e610f45356f54nilgun##
f086b4b402fa9a2fefc7dda85de2a3cc1cd0a654rjung# Parse command line
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd##
3b3b7fc78d1f5bfc2769903375050048ff41ff26ndfor args in $*
aaf7b7f4cc1be050310c3d7f48bce0ec67e174e4nddo
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen case $args in
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen -s ) echo="no" ;;
c68aa7f213d409d464eaa6b963afb28678548f4frbowen -p* ) pathname="`echo $args | sed 's/^..//'`" ;;
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf * ) programs="$programs $args" ;;
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen esac
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowendone
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen##
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen# Now we make the adjustments required for OS/2 and everyone
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen# else :)
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen#
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen# First of all, all OS/2 programs have the '.exe' extension.
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen# Next, we adjust PATH (or what was given to us as PATH) to
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen# be whitespace seperated directories.
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen# Finally, we try to determine the best flag to use for
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen# test/[] to look for an executable file. OS/2 just has '-r'
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen# but with other OSs, we do some funny stuff to check to see
aaf7b7f4cc1be050310c3d7f48bce0ec67e174e4nd# if test/[] knows about -x, which is the prefered flag.
5a58787efeb02a1c3f06569d019ad81fd2efa06end##
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowenif [ "x$os" = "xOS/2" ]
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowenthen
a56ff98d3082c853f69e8de5c3e8bcab2734c0earbowen ext=".exe"
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh pathname=`echo -E $pathname |
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim sed 's/^;/.;/
5a58787efeb02a1c3f06569d019ad81fd2efa06end s/;;/;.;/g
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen s/;$/;./
aaf7b7f4cc1be050310c3d7f48bce0ec67e174e4nd s/;/ /g
c68aa7f213d409d464eaa6b963afb28678548f4frbowen s/\\\\/\\//g' `
c68aa7f213d409d464eaa6b963afb28678548f4frbowen test_exec_flag="-r"
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowenelse
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf ext="" # No default extensions
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen pathname=`echo $pathname |
aaf7b7f4cc1be050310c3d7f48bce0ec67e174e4nd sed 's/^:/.:/
4aa603e6448b99f9371397d439795c91a93637eand s/::/:.:/g
c3c006c28c5b03892ccaef6e4d2cbb15a13a2072rbowen s/:$/:./
c3c006c28c5b03892ccaef6e4d2cbb15a13a2072rbowen s/:/ /g' `
c3c006c28c5b03892ccaef6e4d2cbb15a13a2072rbowen # Here is how we test to see if test/[] can handle -x
4aa603e6448b99f9371397d439795c91a93637eand testfile="pp.t.$$"
c3c006c28c5b03892ccaef6e4d2cbb15a13a2072rbowen
aaf7b7f4cc1be050310c3d7f48bce0ec67e174e4nd cat > $testfile <<ENDTEST
c68aa7f213d409d464eaa6b963afb28678548f4frbowen#!/bin/sh
aaf7b7f4cc1be050310c3d7f48bce0ec67e174e4ndif [ -x / ] || [ -x /bin ] || [ -x /bin/ls ]; then
20f499565e77defe9dab24dd85c02f38a1175855nd exit 0
c3c006c28c5b03892ccaef6e4d2cbb15a13a2072rbowenfi
aaf7b7f4cc1be050310c3d7f48bce0ec67e174e4ndexit 1
4126704c4950bfd46d32ad54e3b106ac6d868a73sfENDTEST
aaf7b7f4cc1be050310c3d7f48bce0ec67e174e4nd
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen if `/bin/sh $testfile 2>/dev/null`; then
4126704c4950bfd46d32ad54e3b106ac6d868a73sf test_exec_flag="-x"
4126704c4950bfd46d32ad54e3b106ac6d868a73sf else
4126704c4950bfd46d32ad54e3b106ac6d868a73sf test_exec_flag="-r"
4126704c4950bfd46d32ad54e3b106ac6d868a73sf fi
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen rm -f $testfile
aaf7b7f4cc1be050310c3d7f48bce0ec67e174e4ndfi
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowenfor program in $programs
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowendo
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen for path in $pathname
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen do
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen if [ $test_exec_flag $path/${program}${ext} ] && \
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen [ ! -d $path/${program}${ext} ]; then
aaf7b7f4cc1be050310c3d7f48bce0ec67e174e4nd if [ "x$echo" = "xyes" ]; then
00b49f91367894cf867206991ff1373cfeabb759gryzor echo $path/${program}${ext}
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen fi
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen exit 0
aaf7b7f4cc1be050310c3d7f48bce0ec67e174e4nd fi
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen done
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowendone
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowenexit 1
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen
c35acdcbd4d173d3c536cf0be1295fa6c510cf8drbowen