python环境变量路径linux_Linux cd 自动加载目录的环境变量

为什么要有这样的功能?

设想有下列的使用场景

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 ~ 即可观看效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值