基于目录的环境变量范围 - 如何实现?

Igo*_*tis 21 bash scope environment-variables working-directory

我有一套工具,我需要根据我正在进行的项目传递参数.我希望能够根据当前目录自动设置几个环境变量.因此,当我在目录之间切换时,我常用的env vars也会改变.例:

让我们当前的目录是foo,因此,如果我这样做:

~/foo$ ./myscript --var1=$VAR1
Run Code Online (Sandbox Code Playgroud)

VAR1会有一些基于foo的值.

然后,假设我切换到了bar目录.如果我做:

~/bar$ ./myscript --var1=$VAR1
Run Code Online (Sandbox Code Playgroud)

VAR1现在应该有一些基于条形的值.

那可能吗?怎么样?

Dan*_* D. 17

ondir程序,您可以指定动作来运行,当你进入并在终端离开目录

  • 有趣的是有人需要这样做.很高兴有人做到了. (2认同)

sre*_*vas 11

有一个direnv可以帮助您轻松地以优雅的方式完成这些工作.只需在项目目录中定义一个.envrc文件,其中包含所需的所有env变量,一旦进入该文件夹,它将获取它.


cxr*_*reg 8

我写了另一个这个实现,有点类似于ondir.当我开始研究时,我实际上并不知道ondir.但是,有一些关键的差异可能会有用.

  • smartcd完全用shell编写,并且与bash和zsh完全兼容,甚至更深奥的选项

  • smartcd将脚本一直向下运行,然后将目录层次结构向下运行到它们的共同祖先,而不仅仅是您要进入和离开的两个目录.这意味着你可以有一个〜/ foo脚本,无论你是"cd~/foo"还是"cd~/foo/bar"都会执行

  • 它具有"变量存储",这是一种处理环境变量的更自动的方式,而ondir要求你明确地和手动地删除和/或重置你的变量

  • smartcd可以通过挂钩你的提示命令打开"autocd"(bash中的PROMPT_COMMAND,zsh中的precmd)

您可以在https://github.com/cxreg/smartcd找到smartcd