这类似于目录的.htaccess。
我有以下内容:
文件:〜/ .myapprc
APP_USER=alagu
APP_DOMAIN=goyaka.com
文件:〜/ testapp / .myapprc
APP_USER=alagu_test
APP_DOMAIN=localhost
我想要的是什么:
[alagu@~ ]$ echo $APP_USER
alagu
[alagu@~ ]$ cd ~/testapp
[alagu@~ ]$ echo $APP_USER
alagu_test
我该如何完成这项工作?
答案 0 :(得分:3)
在您更改目录时,您似乎希望获得.myapprc
。
我可以考虑使用两种途径 - PROMPT_COMMAND
和DEBUG
陷阱。
要使用第一个执行此操作,您将运行以下一次:
PROMPT_COMMAND="[ -f .myapprc ] && . .myapprc"
和第二个:
trap "[ -f .myapprc ] && . .myapprc" DEBUG
这些文件会在每次提示时获取一次文件,因此如果获取该文件的费用很高,您可以将其扩展以检查$PWD
是否已更改。
你也可以覆盖cd
,但这可能会破坏一些shell脚本:
alias cd=cd_
function cd_
{
\cd "$@"
local ret=$?
[ -f .myapprc ] && . .myapprc
return $ret
}
但是做任何这些都不是一个好主意 - 嘿,这些都是巨大的安全漏洞,因为你最终会在.myapprc
中运行任何命令工作目录是。
Joachim的后期编辑 - 将此与PROMPT_COMMAND
/ trap
解决方案一起使用,可以避免过度执行.myapprc,具体如下:
PROMPT_COMMAND='if [ -f .myapprc -a "$PWD" != "$PWDLAST" ]; then PWDLAST="$PWD"; source .myapprc; fi'
答案 1 :(得分:2)
您可以在.bashrc
中创建一个覆盖cd
命令的函数:
cd() {
# "$@" to preserve quoting/whitespace
builtin cd "$@"
[ -f ".myapprc" ] && source .myapprc
}
答案 2 :(得分:1)
您可以使用direnv根据工作目录自定义您的环境。它位于http://direnv.net。