首页 > 解决方案 > 将所有子目录通配符添加到 $PATH 环境变量 (bash)

问题描述

这是我的目录结构(creddump/是我直接从github下载的一个程序,任何包管理器都不支持):

/usr/local/bin/
    ---> creddump/
        ---> pwdump.py (imports from framework)
        ---> framework/
            ---> types.py
        ---> lsadump.py
    ---> another_program/
        ---> x.py

我希望能够简单地通过键入and来运行pwdump.py,而不是它们的完整路径。因此,我将它们的路径添加到我的环境变量中,方法是将其添加到文件中这一行的开头,如下所示:x.pypwdump.pyx.py$PATH~/.bashrc

export PATH=/usr/local/bin/creddump/:/usr/local/bin/another_program/:~/.local/bin:/snap/bin:/usr/sandbox/:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/share/games:/usr/local/sbin:/usr/sbin:/sbin:$PATH

这很好,但我不想$PATH每次我想下载另一个程序时手动添加另一行。我做了一些挖掘,发现 bash 支持通配符扩展。~/.bashrc我在:中取消了对这一行的注释,shopt -s globstar并添加/usr/local/bin/**/:到了export PATH上面行的开头。之后,我做了source ~/.bashrc和/或在我的各种尝试中重新启动了终端。但是,它没有用;

bash: pwdump.py: command not found

我也尝试将它添加到中间和结尾,但没有任何效果。我知道这应该能够工作,因为在我将 Parrot Security OS 系统从 4.10 升级到 4.11 之前,我已经让它工作了。我什export PATH至也尝试过添加该行~/.profile

有想法该怎么解决这个吗?太感谢了!

标签: pythonbash

解决方案


对于tommy2111111111的令人难以置信的简单解决方案(我找不到解释)不起作用的人,这是根据文档的替代方案:

d=(/usr/local/bin/**/)
PATH="${d[*]/%\//:}"$PATH

推荐阅读