基于目录的环境变量作用域-如何实现?

问题描述

| 我有一组工具,我需要根据正在处理的项目传递参数。我希望能够根据当前目录自动设置几个环境变量。因此,当我在目录之间切换时,常用的env var也将更改。例: 让我们的当前目录是foo,因此,如果我这样做:
~/foo$ ./myscript --var1=$VAR1
VAR1将具有一些基于foo的值。 然后,假设我切换到bar目录。如果我做:
~/bar$ ./myscript --var1=$VAR1
VAR1现在应该具有一些基于柱的值。 那可能吗?怎么样?     

解决方法

ondir程序使您可以指定在终端中输入和离开目录时要执行的操作     ,有一个direnv可以帮助您轻松轻松地以一种优雅的方式完成这些工作。只需在项目目录中定义一个.envrc文件,其中包含所有需要的env变量,当您进入该文件夹后,该文件将作为源文件。     ,我已经写了另一个实现,有点类似于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     ,bash或任何其他常见shell的内置功能不直接支持该功能。但是,您可以创建自己的\“ cd \”命令,该命令可以执行您想要的任何操作。例如,您可以为cd加上别名以执行cd,然后运行一个特殊的脚本(例如:〜/ bin / oncd)。该脚本可以在数据库中查找新目录并运行一些命令,或者查看目录中是否有特殊文件(例如:.env)并加载它,等等。     ,我经常做这种事情。我在需要它们的目录中创建了几个同名的批处理文件,这些文件仅设置变量并调用通用脚本。我什至有一个创建其他小文件的批处理文件。     ,这不是很漂亮,但是可以结合使用导出的环境变量和
$PWD
的值。 例如:
export VAR1=prefix
export prefix${HOME////_}_foo=42
export prefix${HOME////_}_bar=blah
然后,
myscript
只需要
eval echo \\${$VAR1${PWD////_}}
就可以得到基于目录的值。     ,如何用功能包装脚本(该功能可以放在系统的bash profile / bashrc文件中,以供所有用户使用)。
myscript () { case $PWD in
/path/to/foo) path/to/myscript --var1=$VAR1 ;;
/path/to/bar) path/to/myscript --var2=$VAR1 ;;
*) ;;
case
}
因此,函数myscript将根据当前的工作目录调用实际的\“ myscript \\”,知道该怎么做。 以此为例:
hmontoliu@ulises:/tmp$ myscript () { case $PWD in /tmp) echo I\\\'m in tmp;; /var) echo I\\\'m in var;; *) echo I\\\'m neither in tmp nor in bar; esac; }
hmontoliu@ulises:/tmp$ myscript 
I\'m in tmp
hmontoliu@ulises:/tmp$ cd /var
hmontoliu@ulises:/var$ myscript 
I\'m in var
hmontoliu@ulises:/var$ cd /etc
hmontoliu@ulises:/etc$ myscript 
I\'m neither in tmp nor in bar
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...