【问题标题】:Why am I not getting files after injecting an environment variable?为什么注入环境变量后我没有获取文件?
【发布时间】:2020-06-18 12:41:59
【问题描述】:

Shell 脚本

git clonerepo project_name project
cd project
git checkout master
git fetch "https://sam@gerrit.com:443/a/project_name" refs/changes/56/157656/1 && git cherry-pick 
FETCH_HEAD
git submodule foreach --recursive 'git fetch --tags'
git submodule update --init --recursive

**#I am getting the modified files in the review here, let modified files='abc.txt cd.txt'.The modified 
files are space-separated.**
modified_files=$(git diff HEAD..origin/$GERRIT_BRANCH --name-only)
cd ../
echo $modified_files

输出: abc.txt cd.txt

#在此处注入新的环境变量 MODIFIED_FILES

echo "MODIFIED_FILES=$modified_files" > $BUILD_NUMBER"_modified_files.txt"

在注入 env 变量后,我在 python 脚本中使用了这个变量。但我只得到一个文件“abc.txt”

Python 脚本

import os
modified_files = os.environ.get('MODIFIED_FILES')
print(modified_files)

输出: abc.txt

【问题讨论】:

    标签: python shell environment-variables


    【解决方案1】:

    问题不在于 Python,而在于您的 shell 命令行。

    $ echo "MODIFIED_FILES=$modified_files"
    MODIFIED_FILES=abc.txt cd.txt
    

    你看到问题了吗?只有第一个文件名将在该变量中。这就是为什么你应该总是双引号变量。

    建议编号2:如果你想要环境变量,你应该导出它。

    建议编号3:将整个文件名用双引号括起来,并用花括号将变量名括起来。

    echo "export MODIFIED_FILES=\"$modified_files\"" > "${BUILD_NUMBER}_modified_files.txt"
    

    【讨论】:

    • echo "export MODIFIED_FILES=\"$modified_files\"" > "${BUILD_NUMBER}_modified_files.txt" 没有返回
    • 我使用了 echo "MODIFIED_FILES=\"$modified_files\"" > "${BUILD_NUMBER}_modified_files.txt" 并返回了 "abc.txt 而不是第二个文件。
    • 和 echo "MODIFIED_FILES=$modified_files" 返回 MODIFIED_FILES=abc.txt\n cd.txt
    • 如果你有换行符,在 $modified_files 中,它们应该被删除。 echo "MODIFIED_FILES=\"$(tr -d '\n' "${BUILD_NUMBER}_modified_files.txt" 这有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2022-06-22
    相关资源
    最近更新 更多