美文网首页
Linux cd 自动加载目录的环境变量

Linux cd 自动加载目录的环境变量

作者: Asbefore如初_3142 | 来源:发表于2020-07-22 17:52 被阅读0次

个人网站地址

为什么要有这样的功能?

设想有下列的使用场景

1: 有一个 python 项目,使用 virtualenv 创建了一个虚拟环境

在运行前,需要执行 source venv/bin/activate

然后才能执行 python run.py

在执行完成后,为了不影响后续的 python 使用,还需要退出虚拟环境,执行:deactivate

2: 有多个 golang 项目,依赖的库和版本不一样

在 目录1 时,需要手动 export 设定 GOPATH

当编写工程2 时,同样需要手动 export 再设定一遍 GOPATH

编写脚本

脚本自动检测文件是否存在,并加载环境变量

cdrun(){
  # 进入目录时,执行此目录的环境配置
  # 退出目录时,同样执行此目录的环境配置
  if [ `pwd` != "$HOME/software" -a -f ".runrc" \
      -a -r ".runrc" ]; then
      export RUNRC_STATUS="out"
      source .runrc
  fi
  if [ -f ~/software/.runrc ]; then . ~/software/.runrc; fi
  \cd $@
  if [ `pwd` != "$HOME/software" -a -f ".runrc" \
      -a -r ".runrc" ]; then
      export RUNRC_STATUS="run"
      source .runrc
  fi
  unset RUNRC_STATUS
}

alias别名设定cd

编写之后使用 alias 别名设定 cd 命令,使其在执行时加载目录环境

alias cd='cdrun $@'

在哪里设定?当然是 用户目录的 .bashrc

修改后的 .bashrc 类似下列:

...
xxxxxxxxxxxxxxxxxxxxx
...
# 上面假设是已有的环境,不要改动
# 下面新增以下内容:

cdrun(){
  # 进入目录时,执行此目录的环境配置
  # 退出目录时,同样执行此目录的环境配置
  if [ `pwd` != "$HOME/software" -a -f ".runrc" \
      -a -r ".runrc" ]; then
      export RUNRC_STATUS="out"
      source .runrc
  fi
  if [ -f ~/software/.runrc ]; then . ~/software/.runrc; fi
  \cd $@
  if [ `pwd` != "$HOME/software" -a -f ".runrc" \
      -a -r ".runrc" ]; then
      export RUNRC_STATUS="run"
      source .runrc
  fi
  unset RUNRC_STATUS
}
alias cd='cdrun $@'

说明

在进入和退出目录时,会检测当前目录是否存在某个文件,然后通过一个变量标志是退出还是进入

当然,有一个环境变量 ~/software/.runrc 文件,在每次退出目录时加载

这是为了充当一个全局的环境变量,类似于 /etc/bash.bashrc 一样
在执行 cd 命令前,除了加载当前目录的环境,还会加载一次全局环境变量

一般可以不用关注

使用案例

通过自动加载可以减少部分重复敲按键的工作

自动加载python虚拟环境

假设 python 工程目录在 /home/admin/pyproject
有一个 virtualenv 环境: venv
则在此目录下,创建 .runrc 文件,注意有一个 点 : .

cd /home/admin/pyproject
vim .runrc

文件内容如下:

if [ "$RUNRC_STATUS"x == "run"x ]; then
    echo "auto load python"
    source ./venv/bin/activate
else
    deactivate
fi

在进入目录时自动加载 virtualenv 环境,退出目录则 卸载环境

在此目录下执行: cd ./ 即会发现环境自动加载了

自动设定 GOPATH

假设 go 工程目录在 /home/admin/goproject
则执行:

cd /home/admin/goproject
vim .runrc

文件内容可以设定如下:

if [ "$RUNRC_STATUS"x == "run"x ]; then
    # 进入到当前目录
    # 执行一些初始化操作
    GO_PATH_TMP=$GOPATH
    export GOPATH=`pwd`
    echo "set GOPATH=$GOPATH"
else
    export GOPATH=$GO_PATH_TMP
    unset GO_PATH_TMP
    echo "reset GOPATH=$GOPATH"
fi

进入目录会设定当前 GOPATH 环境变量,并临时保存之前的 GOPATH
退出目录则会重设 GOPATH 为之前的变量

cd 到HOME目录输出欢迎信息

用户执行 cd 或者 cd ~ 进入 home 目录时,输出一行欢迎信息
执行 vim ~/.runrc 文件内容如下:

if [ "$RUNRC_STATUS"x == "run"x ]; then
    # 输出欢迎信息
    echo "hello"
else
    # 退出当前目录,执行一些退出操作
    echo >/dev/null
fi

执行 cd ~ 即可观看效果

相关文章

  • Linux cd 自动加载目录的环境变量

    个人网站地址 为什么要有这样的功能? 设想有下列的使用场景 1: 有一个 python 项目,使用 virtual...

  • 刚刚接触的人工智能的我

    Linux基础命令: 切换目录 cd cd ~ 切换到当前目录的主目录 cd . 切换到当前目录 cd ....

  • Linux常用操作

    Linux常用操作 • 目录• 查看目录:ls• 进入目录:cd• 快捷操作• 向上:cd ..• 后退:cd...

  • 今日收获--linux常见命令、nodejs

    1.linux命令 #ll 查看目录 #cd 目录名 进入目录 #cd 退回根目录 #cd .. 返回上级目录 ...

  • Linux常用命令

    Linux cd /home 进入 '/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上...

  • cd command

    Linux cd命令使用小技巧: cd 进入用户主目录; cd ~ 进入用户主目录; cd - ...

  • Linux常用操作

    Linux常用操作目录查看目录:ls进入目录:cd快捷操作:向上:cd..向下:cd-回到home:cd~进入根目...

  • Linux常用命令

    Linux常用命令 1.切换目录命令cd: cd app 切换到app目录 cd .. 切换到上一层目录 cd /...

  • Linux 常用命令

    1、进入Linux自带目录''' cd / '''

  • Linux指令和vim编辑器指令

    Linux指令 cd ~ ( 'cd' <=> change directory )回到根目录所在位置;cd - ...

网友评论

      本文标题:Linux cd 自动加载目录的环境变量

      本文链接:https://www.haomeiwen.com/subject/ajutlktx.html