which コマンドの実装
2008/04/10 追記:
id:michisu:20080410#p1 で書き直してくれました(^ ^;;
2^8 ぐらい、そちらの方がきれいです。
こんな駄コードは見ず、そちらをご覧ください。
要件定義/目的: 環境変数 PATH からコマンドの絶対パスを取得する
自己アピール: なし(単なる勉強)
コメント: 最後の詰めが汚い、もう少し洗練できそう、シェルスクリプトで書いた方が簡単かも?
#!/bin/env python import os, sys, glob cmd_name = sys.argv[1] path_list = [ item for item in os.environ['PATH'].split(':') ] path_to_file = [ glob.glob(str(item) + '/' + cmd_name) for item in set(path_list) ] # list comprehension #path_to_file = map( (lambda item: glob.glob(str(item) + '/' + cmd_name) ), set(path_list)) # map function path_to_cmd = "Not such command" i=0 while i < len(path_to_file): for item in path_to_file[i]: if os.access(item, 1): path_to_cmd = item i += 1 print path_to_cmd
- 実行結果
$ echo $PATH /usr/kerberos/bin:/bin:/usr/bin:/usr/local/bin:/usr/lib/qt3/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin $ python which.py which /usr/bin/which $ python which.py ls /bin/ls $ python which.py xgawk /usr/local/bin/xgawk $ ls -al /usr/local/bin/fake_cmd -rw-r--r-- 1 root root 0 2008-04-09 08:12 /usr/local/bin/fake_cmd $ python which.py fack_cmd Not such command