linux - 递归覆盖bash中的rc文件

标签 linux bash unix ssh

这类似于目录的 .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

我如何完成这项工作?

最佳答案

看起来您想在每次更改目录时都获取 .myapprc

我能想到您可以使用两种途径 - PROMPT_COMMANDDEBUG 陷阱。

要对第一个执行此操作,您将运行以下命令一次:

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"];然后 PWDLAST="$PWD";来源.myapprc; fi'


关于linux - 递归覆盖bash中的rc文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9579687/

相关文章:

linux - "sort filename | uniq"不适用于大文件

linux - 带有单引号 bash 脚本的 jq

bash - 如何从特定日期开始通过 goaccess 获取 access_log 摘要?

c - pthread(段错误)

c - 在迷你 shell 中使用管道系统调用

linux - 如何在连接之前插入新行?

java - 如何在linux中设置servlet-api.jar文件的类路径

linux - 对于 vCPU,为什么型号名称与服务器的体系结构不一致/proc/cpuinfo?

linux - 说服 gcc 忽略系统库以支持本地安装的库

c++ - CUDA 和固定(页面锁定)内 stub 本没有页面锁定?