我有一套工具,我需要根据我正在处理的项目传递参数。我希望能够根据当前目录自动设置几个环境变量。因此,当我在目录之间切换时,我常用的env vars也会改变。例如:
让我们当前的目录是foo,因此如果我这样做:
~/foo$ ./myscript --var1=$VAR1
VAR1会有一些基于foo的值。
然后,假设我切换到了bar目录。如果我这样做:
~/bar$ ./myscript --var1=$VAR1
VAR1现在应该有一些基于条形的值。
这可能吗?怎么样?
答案 0 :(得分:17)
ondir程序允许您指定在终端中输入和离开目录时要运行的操作
答案 1 :(得分:8)
我已经写了另一个这个实现,有点类似于ondir。当我开始研究时,我实际上并不知道ondir。但是,有一些关键的差异可能会有用。
smartcd完全用shell编写,与bash和zsh完全兼容,即使是更深奥的选项
smartcd会将目录层次结构中的脚本向下运行到其共同的祖先,而不仅仅是您要进入和离开的两个目录。这意味着您可以使用〜/ foo脚本执行,无论您是“cd~ / foo”还是“cd~ / foo / bar”
它具有“变量存储”,这是处理环境变量的一种更自动的方式,而ondir要求您明确地手动删除和/或重置变量
smartcd可以通过挂钩你的提示命令打开“autocd”(bash中的PROMPT_COMMAND,zsh中的precmd)
答案 2 :(得分:8)
有direnv可以帮助您轻松,优雅地完成这些工作。只需在项目目录中定义一个.envrc文件,其中包含所需的所有env变量,一旦你进入该文件夹,它就会获取它。
答案 3 :(得分:2)
这不是bash或任何其他常见shell的内置功能直接支持的内容。但是,您可以创建自己的“cd”命令,该命令将执行您想要的任何操作。例如,您可以使用别名cd来执行cd,然后运行特殊脚本(例如:〜/ bin / oncd)。该脚本可以在数据库中查找新目录并运行一些命令,或查看目录中是否有特殊文件(例如:.env)并加载它等等。
答案 4 :(得分:0)
我做了很多这样的事情。我在需要它们的目录中创建了几个同名的批处理文件,它们只设置变量并调用公共脚本。我甚至有一个创建其他小文件的批处理文件。
答案 5 :(得分:0)
这不是很好,但您可以使用导出的环境变量和$PWD
的值的组合。
例如:
export VAR1=prefix
export prefix${HOME////_}_foo=42
export prefix${HOME////_}_bar=blah
然后myscript
只需要eval echo \${$VAR1${PWD////_}}
来获取基于目录的值。
答案 6 :(得分:0)
如何使用函数包装脚本(该函数可以放在系统文件中的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