1996-11-27 15:52:01 -04:00
|
|
|
#! /usr/bin/env python
|
1991-06-04 17:36:54 -03:00
|
|
|
|
|
|
|
# Variant of "which".
|
|
|
|
# On stderr, near and total misses are reported.
|
1992-03-02 12:17:31 -04:00
|
|
|
# '-l<flags>' argument adds ls -l<flags> of each file found.
|
1991-06-04 17:36:54 -03:00
|
|
|
|
1997-10-20 20:48:01 -03:00
|
|
|
import sys
|
|
|
|
if sys.path[0] in (".", ""): del sys.path[0]
|
|
|
|
|
1992-03-30 07:13:59 -04:00
|
|
|
import sys, os, string
|
1991-06-04 17:36:54 -03:00
|
|
|
from stat import *
|
|
|
|
|
|
|
|
def msg(str):
|
2001-01-17 04:48:39 -04:00
|
|
|
sys.stderr.write(str + '\n')
|
1991-06-04 17:36:54 -03:00
|
|
|
|
1992-03-30 07:13:59 -04:00
|
|
|
pathlist = string.splitfields(os.environ['PATH'], ':')
|
1991-06-04 17:36:54 -03:00
|
|
|
|
|
|
|
sts = 0
|
1992-03-02 12:17:31 -04:00
|
|
|
longlist = ''
|
|
|
|
|
|
|
|
if sys.argv[1:] and sys.argv[1][:2] == '-l':
|
2001-01-17 04:48:39 -04:00
|
|
|
longlist = sys.argv[1]
|
|
|
|
del sys.argv[1]
|
1991-06-04 17:36:54 -03:00
|
|
|
|
|
|
|
for prog in sys.argv[1:]:
|
2001-01-17 04:48:39 -04:00
|
|
|
ident = ()
|
|
|
|
for dir in pathlist:
|
|
|
|
file = os.path.join(dir, prog)
|
|
|
|
try:
|
|
|
|
st = os.stat(file)
|
|
|
|
except os.error:
|
|
|
|
continue
|
|
|
|
if not S_ISREG(st[ST_MODE]):
|
|
|
|
msg(file + ': not a disk file')
|
|
|
|
else:
|
|
|
|
mode = S_IMODE(st[ST_MODE])
|
|
|
|
if mode & 0111:
|
|
|
|
if not ident:
|
|
|
|
print file
|
|
|
|
ident = st[:3]
|
|
|
|
else:
|
|
|
|
if st[:3] == ident:
|
|
|
|
s = 'same as: '
|
|
|
|
else:
|
|
|
|
s = 'also: '
|
|
|
|
msg(s + file)
|
|
|
|
else:
|
|
|
|
msg(file + ': not executable')
|
|
|
|
if longlist:
|
|
|
|
sts = os.system('ls ' + longlist + ' ' + file)
|
|
|
|
if sts: msg('"ls -l" exit status: ' + `sts`)
|
|
|
|
if not ident:
|
|
|
|
msg(prog + ': not found')
|
|
|
|
sts = 1
|
1991-06-04 17:36:54 -03:00
|
|
|
|
|
|
|
sys.exit(sts)
|