| 
									
										
										
										
											1996-11-27 19:52:01 +00:00
										 |  |  | #! /usr/bin/env python | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Variant of "which". | 
					
						
							|  |  |  | # On stderr, near and total misses are reported. | 
					
						
							| 
									
										
										
										
											1992-03-02 16:17:31 +00:00
										 |  |  | # '-l<flags>' argument adds ls -l<flags> of each file found. | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-10-20 23:48:01 +00:00
										 |  |  | import sys | 
					
						
							|  |  |  | if sys.path[0] in (".", ""): del sys.path[0] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1992-03-30 11:13:59 +00:00
										 |  |  | import sys, os, string | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | from stat import * | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def msg(str): | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |     sys.stderr.write(str + '\n') | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1992-03-30 11:13:59 +00:00
										 |  |  | pathlist = string.splitfields(os.environ['PATH'], ':') | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | sts = 0 | 
					
						
							| 
									
										
										
										
											1992-03-02 16:17:31 +00:00
										 |  |  | longlist = '' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if sys.argv[1:] and sys.argv[1][:2] == '-l': | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |     longlist = sys.argv[1] | 
					
						
							|  |  |  |     del sys.argv[1] | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | for prog in sys.argv[1:]: | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00: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 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | sys.exit(sts) |