【问题标题】:directory specific PATH variable目录特定的 PATH 变量
【发布时间】:2012-03-16 08:28:34
【问题描述】:

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

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

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

【问题讨论】:

  • 谢谢,这正是我想要的。再次发布它作为答案,我会接受它。

标签: bash shell path


【解决方案1】:

我想说,处理项目相关配置的常用方法是为每个项目都有一个配置脚本,并在处理该项目时获取它。此外,使用的配置脚本可能会更改提示,以便您只需查看它就知道给定 shell 的活动项目是什么。

【讨论】:

    【解决方案2】:

    如果您需要修改后的路径只是为了方便您在控制台中工作,您可以覆盖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 建议的项目之间切换时获取的配置脚本是标准且更简洁的解决方案。

    【讨论】:

      【解决方案3】:

      来自 direnv.org

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

      【讨论】:

      • @Amiel - 不确定它是移动了还是我搞砸了。现在它位于您引用的页面中的链接的 github 上。
      • 感谢您的建议顺便说一句,direnv 它看起来像一个有用的项目
      猜你喜欢
      • 2019-11-02
      • 1970-01-01
      • 2010-11-26
      • 2021-04-25
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 2012-02-12
      相关资源
      最近更新 更多