目录特定的PATH变量

时间:2012-02-26 17:27:54

标签: bash shell path

我想根据当前目录更改我的PATH变量。

对于一个项目,我正在使用一组我想要运行的脚本而不指定脚本的完整路径。通常我会通过将“Scripts”目录添加到PATH变量来实现。

问题是,对于我的其他项目,我不想在我的路径中包含这些脚本。有没有办法根据当前目录更改PATH变量?如果是这样,我会很乐意学习如何。

3 个答案:

答案 0 :(得分:3)

来自direnv.org

“direnv项目的目的是在shell中允许路径依赖的环境变量。它有很多用途,但我可以使用它来进行项目特定的设置,以免弄乱我的〜/ .profile。我用它来指定ruby版本,设置AWS或SSH密钥,......“

答案 1 :(得分:2)

我要说处理项目相关配置的常用方法是为每个项目配置一个配置脚本,并在处理该项目时为其提供源代码。此外,使用的配置脚本可能会更改提示,以便您只需查看给定shell的活动项目即可。

答案 2 :(得分:0)

如果您需要修改后的路径只是为了方便您在使用控制台时工作,可以覆盖cd

function cd() {
    builtin cd "$@"
    case $(pwd) in
        */project1*) export PATH=somepath1;;
        */project2*) export PATH=somepath2;;
        ...
    esac
}
export -f cd

这当然只有在使用shell的cd命令更改目录时才有效,而不是如果应用程序使用C API更改目录。这段代码也有点棘手,因为你必须列出一些PATH值,并确保合理地处理“标准”目录(项目之外的目录)的情况,你可能希望将PATH重置为原始值。此外,您可能会遇到与用户或脚本的交互,手动修改其PATH值。您设置的值应包括这些值,但在覆盖cd之前,您需要将PATH存储在临时变量(如ORIG_PATH)中。

重点是:您要求的是可能的(如上所示),但它可能会引起混淆并需要一些工作。当您在jcollado建议的项目之间切换时,配置脚本来源于标准和更清洁的解决方案。