Shell脚本读取TXT内容赋值环境变量后外部访问为空如何解决?
问题根因
默认直接执行Shell脚本时,操作系统会创建独立的子Shell进程运行脚本代码,子进程的环境变量仅对自身及其派生的子进程生效,脚本执行完成后子进程销毁,父进程(你当前操作的终端Shell)不会继承子进程的环境变量,因此外部读取不到APP_VERSION的值。
解决方案
有两种常用的可行方案:
方案1:使用source命令执行脚本
source(也可简写为.)是Shell内置命令,作用是让脚本在当前Shell进程中直接执行,不会创建独立子进程,脚本中设置的环境变量会直接保留在当前Shell中。
操作步骤:
将你的脚本保存为set_app_version.sh,执行时运行以下命令即可:source set_app_version.sh # 或者简写为 . set_app_version.sh执行完成后再运行
echo $APP_VERSION就能正常获取版本号。方案2:输出export语句结合eval导入变量
你可以修改脚本,让其直接输出完整的export命令,再通过eval在当前Shell执行输出的内容,也能实现变量导入:
修改后的脚本内容:input="VERSION.txt" while IFS= read -r line do echo "export APP_VERSION='$line'" done < "$input"在终端执行以下命令即可导入变量:
eval $(./set_app_version.sh)
脚本优化建议
因为你的VERSION.txt只有一行内容,不需要用循环读取,可以直接简化为一行代码实现变量赋值,效率更高:
# 写法1:通用兼容写法 export APP_VERSION=$(cat VERSION.txt | tr -d '\n') # 写法2:Bash专属更简洁的写法,自动去除末尾换行 export APP_VERSION=$(<VERSION.txt)
内容的提问来源于stack exchange,提问作者Don T Spamme
相关产品推荐
相关产品推荐

