问题描述
我正在尝试在 Jenkins 管道脚本中的 Bash shell 中设置 IFS。请参阅下面的第 34 行。问题是我无法正确地进行多级引用。如果我只是在 bash 终端上输入,则该行将是 IFS=$'\n'
。但是,无论我在不同的组合中使用多少个反斜杠,我都无法使其工作。在这一点上,我只是猜测。
第 36 行末尾的 $filename
变量是一个文件名列表,内部空格由换行符 (\n
) 分隔。因此,我希望 IFS 变量仅为 \n
。
这是文本形式的相同片段。
steps {
sh """
#!/bin/bash
export PATH="$PATH:/root/.local/bin"
IFS=\$\\'\\n\\'
pip install -r requirements.txt --user
python EC_Workload_Analysis/combine.py --webdav --zipfile ${BUILD_NUMBER} --user $SCRIPT_CREDS_USR --password $SCRIPT_CREDS_PSW $filenames
"""
}
解决方法
你可以试试吗
export IFS=$(echo -e "\n ")
因为你不能插入你需要的字符,但是你可以创建和存储它,你可以做这个测试
echo "$IFS $IFS $IFS"
,
感谢 l0b0 的评论!我将第 32 到 36 行放在我的 git 存储库 run_me.sh
中自己的脚本中,删除了无关的引号和反斜杠,然后将 bash < run_me.sh
放在第 32 到 36 行的位置。
run_me.sh
看起来像这样:
#!/bin/bash
export PATH="$PATH:/root/.local/bin"
export IFS=$'\n'
pip install -r requirements.txt --user
python EC_Workload_Analysis/combine.py --webdav --zipfile $BUILD_NUMBER --user $SCRIPT_CREDS_USR --password $SCRIPT_CREDS_PSW $filenames
,
您可以编写如下代码片段并尝试。
steps {
sh """
#!/bin/bash
export PATH="$PATH:/root/.local/bin"
IFS=\$'\\n'
pip install -r requirements.txt --user
python EC_Workload_Analysis/combine.py --webdav --zipfile ${BUILD_NUMBER} --user $SCRIPT_CREDS_USR --password $SCRIPT_CREDS_PSW $filenames
"""
}
说明:
在双引号中,$
被视为特殊字符,因此需要使用 \
对其进行转义。 \
也是一个特殊字符,因此我们也将通过用双斜杠 \\
替换它来转义它。
我已经尝试过使用虚拟数据,所以请确认它是否符合您的要求。