如何实现bash脚本变量跨脚本共享且无需依赖磁盘存储文件?
Bash多脚本共享变量的最优实践方案
以下方案均无需落地到磁盘存储,完全基于内存实现,可避免磁盘频繁写入问题:
方案1:导出环境变量(适合父子进程场景读共享)
如果所有待执行脚本都从同一个父shell进程启动,仅需要读取共享变量,直接用export声明全局环境变量即可,无需任何辅助存储:
# 在父shell/入口执行脚本中导出共享变量 export SHARE_VAR1="Alfa" export SHARE_VAR2=10086 # 后续启动的所有子脚本均可直接读取上述变量 ./task1.sh ./task2.sh
注意:默认子进程修改环境变量不会同步到父进程和其他子进程,仅适合只读共享场景
方案2:tmpfs内存文件系统存储(适合跨进程读写共享,兼容性最高)
Linux系统默认会挂载/dev/shm作为tmpfs内存文件系统,写入该目录的所有内容都存放在RAM中,不会落到磁盘,完全无磁盘写入损耗。你可以把原来的变量存储路径替换为/dev/shm下的路径,原有代码逻辑几乎不需要修改:
# 写入变量到内存文件系统 echo "var_01=Alfa" > /dev/shm/shared_var.sh # 修改共享变量 sed -i 's/var_01=Alfa/var_01=Berta/' /dev/shm/shared_var.sh # 任意脚本读取共享变量 source /dev/shm/shared_var.sh # 删除变量 sed -i '/^var_01=/d' /dev/shm/shared_var.sh
该方案支持跨不同shell会话、不同进程的变量读写共享,是适用范围最广的方案。
方案3:source执行共享当前shell作用域(适合同进程下全共享)
如果所有脚本都可以在同一个shell进程中执行,直接用source命令运行脚本,所有脚本的变量都会共享当前shell的全局作用域,无需额外的存储或导出操作:
# 用source执行脚本,而非开启子进程运行 source ./task1.sh # task1中定义的变量可直接被后续执行的task2读取、修改 source ./task2.sh
内容的提问来源于stack exchange,提问作者Alfred.37
相关产品推荐
相关产品推荐

