在虚拟环境及macOS中无法正常运行Shell脚本问题求助
问题解决:Flask环境配置脚本无法激活虚拟环境/设置环境变量
核心原因
你用sh envset.sh执行脚本时,脚本是在子Shell进程中运行的。子Shell里的环境变量修改、虚拟环境激活操作,只会作用于子Shell本身,不会传递到父Shell(也就是你当前的终端会话)。脚本执行完毕后子Shell退出,父Shell的环境完全不受影响。
解决方案
要让脚本的修改作用于当前Shell,必须让脚本在当前Shell进程中执行,用以下两种方式之一:
方式1:使用source命令运行脚本
source envset.sh
或者简写为:
. envset.sh
方式2:给脚本添加执行权限后,用source调用
先给脚本添加执行权限:
chmod +x envset.sh
再用source执行:
source ./envset.sh
额外说明
你脚本里echo $FLASK_APP输出application.py,是因为子Shell里的export FLASK_APP=app.py只在子Shell生效,但父Shell原本就有FLASK_APP=application.py的设置,所以脚本执行完回到父Shell后,还是显示原来的值。用上述方法执行脚本后,当前Shell的FLASK_APP就会被设置为app.py,虚拟环境也会正常激活。
内容的提问来源于stack exchange,提问作者Minh Phạm
相关产品推荐
相关产品推荐

