显示可执行文件以当前路径配置覆盖其他文件
path_overrides的Python项目详细描述
检测“重写”系统路径中其他可执行文件的可执行文件。
安装
path_overrides已经在最新的os x和linux系统上进行了测试。它应该适用于任何posix系统。
要安装,只需运行:
$ pip install --user path_overrides
或类似的。建议安装python包blessings以提供彩色输出,但不是必需的。
使用
运行path_overrides。它将显示一个列表,其中可执行文件隐藏其他(不同)可执行文件。
动机
如果我在最新的Linux或OS X外壳上按了几次“tab”键,就会得到如下提示:
Display all 2228 possibilities? (y or n)
有2000多个命令都准备好了,等待在输入一个单词时运行。它们并不都生活在一个地方;它们生活在(通常是很小的)多个不同的位置,这些位置列在PATH环境变量中。PATH是一个有序的路径序列,搜索这些路径以找到将要运行的可执行文件。这在大多数情况下都能很好地工作,但是对于所有没有单一名称空间的情况,都会发生冲突。在PATH中,可能有许多同名的项位于不同的路径中。在正常使用中,这不是问题;PATH是有序的,并且它的每个部分都是唯一的不可能发生冲突的目录。对于哪个可执行文件将“获胜”,永远没有不确定性,whichshell程序将报告“哪个”路径具有优先权。
但是,除非您习惯于在执行任何命令之前定期运行which,或者只运行具有绝对路径名的命令,否则可能会有意外;如果有人将可执行文件放在PATH中比您预期要运行的更早的位置,则需要先执行。path_overrides将报告稍后在PATH中重写different命令的任何命令。注意,从/usr/bin到/bin中程序的符号链接非常常见;因为它们表示“相同的命令”,所以path_overrides将忽略这些符号链接。
示例
这是在OSX机器上运行的path_overrides,当前在VirtualEnv中工作。如果安装了blessings,则输出将着色。
ben$ path_overrides /Users/ben/.virtualenvs/path_overrides/bin/python overrides /usr/bin/python /Users/ben/.virtualenvs/path_overrides/bin/easy_install overrides /usr/bin/easy_install /Users/ben/.virtualenvs/path_overrides/bin/python2.7 (python) overrides /usr/bin/python2.7 (../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7) /Users/ben/.virtualenvs/path_overrides/bin/easy_install-2.7 overrides /usr/bin/easy_install-2.7 /Users/ben/.virtualenvs/path_overrides/bin/pip overrides /usr/local/bin/pip /Library/Frameworks/Python.framework/Versions/3.4/bin/2to3 (2to3-3.4) overrides /usr/bin/2to3 /usr/bin/ndisasm overrides /usr/local/bin/ndisasm (../Cellar/nasm/2.11.02/bin/ndisasm) /usr/bin/2to3 overrides /usr/local/bin/2to3 (../../../Library/Frameworks/Python.framework/Versions/3.4/bin/2to3) /usr/bin/nasm overrides /usr/local/bin/nasm (../Cellar/nasm/2.11.02/bin/nasm) /usr/local/bin/libpng-config (../Cellar/libpng/1.6.10/bin/libpng-config) overrides /opt/X11/bin/libpng-config (libpng15-config) /usr/local/bin/fc-match (../Cellar/fontconfig/2.11.1/bin/fc-match) overrides /opt/X11/bin/fc-match /usr/local/bin/fc-list (../Cellar/fontconfig/2.11.1/bin/fc-list) overrides /opt/X11/bin/fc-list /usr/local/bin/fc-cat (../Cellar/fontconfig/2.11.1/bin/fc-cat) overrides /opt/X11/bin/fc-cat /usr/local/bin/fc-cache (../Cellar/fontconfig/2.11.1/bin/fc-cache) overrides /opt/X11/bin/fc-cache /usr/local/bin/fc-scan (../Cellar/fontconfig/2.11.1/bin/fc-scan) overrides /opt/X11/bin/fc-scan /usr/local/bin/freetype-config (../Cellar/freetype/2.5.3_1/bin/freetype-config) overrides /opt/X11/bin/freetype-config /usr/local/bin/fc-validate (../Cellar/fontconfig/2.11.1/bin/fc-validate) overrides /opt/X11/bin/fc-validate /usr/local/bin/fc-query (../Cellar/fontconfig/2.11.1/bin/fc-query) overrides /opt/X11/bin/fc-query /usr/local/bin/fc-pattern (../Cellar/fontconfig/2.11.1/bin/fc-pattern) overrides /opt/X11/bin/fc-pattern
选项
在大多数情况下,{TT1}$不需要提供任何选项,但是存在一些情况,例如检查备用根内的路径(例如,当构建另一个ChooT文件系统时)。
在这种情况下,可以将显式路径作为参数提供给--path参数。还可以通过--path-sep参数提供默认路径分隔符的替代项(例如posix系统上的“:”,windows上的“;”)。最后,可以指定一个--root-dir路径,将所有路径元素都视为本地路径。请注意,--root-dir值不会包含在path_overrides给出的输出中;假设调用程序/用户知道这一点,并且更简明的信息是可取的。
以下示例显示了所有这些选项的用法:
$ mkdir -p ~/bin ~/sbin $ touch ~/bin/{x,y} ~/sbin/{x,y} $ chmod +x ~/bin/{x,y} ~/sbin/{x,y} $ path_overrides --path-sep=' ' --path='/bin /sbin' --root-dir='~' /bin/y overrides /sbin/y /bin/x overrides /sbin/x
帮助
使用--help参数获得帮助;使用--version报告path_overrides的版本:
Usage: path_overrides [-h] [--version] [-p PATH] [--path-sep PATH_SEP] [--root-dir ROOT_DIR] Display executables in the PATH which override other (different) programs later in the PATH optional arguments: -h, --help show this help message and exit --version show program's version number and exit -p PATH, --path PATH provide custom PATH value directly rather than from environment --path-sep PATH_SEP path separator; defaults to system default --root-dir ROOT_DIR assumed root of PATH if given
@代码结构2014-2015