在日常开发和维护过程中,尤其是在处理Linux服务器环境的数据修复或执行其他Django命令时,通常需要手动导入环境变量,操作起来非常不安全和麻烦。这对于开发者来说,特别是通过SSH工具操作时,显得尤为麻烦。每次操作都需要先加载环境变量,然后再执行脚本。例如:
# 变量加载
export DJANGO_ENV=production
export DJANGO_SETTINGS_MODULE=douniu.settings.production
# 脚本执行
/www/server/pyporject_evn/xxxxx/bin/python3 manage.py crawl
# 脚本执行
/www/server/pyporject_evn/xxxxx/bin/python3 manage.py crawl
为了解决这个问题,简化线上环境中的操作流程,我决定编写一个脚本,以实现Python虚拟环境的快速切换,并自动导入所需的环境变量。
问题分析
在编写脚本之前,我们需要了解一个关键点:当我们直接运行一个Bash脚本时,脚本会在一个新的子Shell中执行。任何在脚本中设置的环境变量或虚拟环境的激活状态都只会在这个子Shell中生效,而不会影响当前的Shell会话。这就解释了为什么每次运行脚本后,环境变量和虚拟环境的设置并没有在当前Shell中生效。
解决方案:使用source或.命令
为了解决这个问题,并确保环境变量和虚拟环境在当前Shell中生效,可以通过使用source命令或.命令来运行脚本。这样,脚本中的命令就会在当前Shell中执行,而不是在一个新