如何在另一Shell脚本中使用前一个脚本生成的路径?
解决Shell脚本间环境变量传递的问题
方法1:通过临时文件传递变量
Jenkins中每个Shell脚本会启动独立子进程,export的环境变量无法跨进程共享,可通过临时文件存储变量值:
- 在Script1末尾添加写入逻辑:
注:echo "${TARBALL_PATH}" > "${WORKSPACE}/tarball_path.txt"${WORKSPACE}是Jenkins自带环境变量,指向当前任务工作目录,确保两个脚本都能访问该文件。 - 在Script2开头读取文件内容:
TARBALL_PATH=$(cat "${WORKSPACE}/tarball_path.txt") # 验证变量是否获取成功 echo "tar包路径:${TARBALL_PATH}" WS_DIR="${TARBALL_PATH}"
方法2:借助Jenkins全局环境变量传递(推荐)
通过Jenkins的变量注入机制,将Script1的变量提升为全局环境变量:
- 在Script1中把变量写入属性文件:
export TARBALL_PATH="${DEST_FOLDER}/test_tar_ball" echo "TARBALL_PATH=${TARBALL_PATH}" >> "${WORKSPACE}/env.properties" - 在Jenkins构建流程中添加「Inject environment variables」步骤,选择「Properties File Path」为
${WORKSPACE}/env.properties,后续Script2可直接使用${TARBALL_PATH}变量。
方法3:合并两个脚本为一个进程
若两个脚本逻辑关联性强,可合并为单一脚本,变量在同一进程内直接生效:
#!/bin/bash # 原Script1打包逻辑 export DEST_FOLDER="/指定路径" export TARBALL_PATH="${DEST_FOLDER}/test_tar_ball" tar -czf "${TARBALL_PATH}.tar.gz" /测试环境目录 # 原Script2部署逻辑 WS_DIR="${TARBALL_PATH}" echo "部署目标路径:${WS_DIR}" # 执行部署命令
原方法失效原因
Jenkins中每个Shell脚本是独立bash进程,export的变量仅在当前进程及子进程内有效,进程结束后变量销毁,因此Script2作为独立进程无法读取Script1的环境变量。
内容的提问来源于stack exchange,提问作者Barnala vijaykumar
相关产品推荐
相关产品推荐

