Shell 在 Jenkins 管道中引用 IFS
Shell quotes with IFS in Jenkins Pipeline
我正在尝试在 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
"""
}
解释:
在双引号中,$
被视为特殊字符,因此需要使用 \
进行转义。 \
也是一个特殊字符,因此我们也将通过用双斜杠 \
.
替换它来转义它
我试过使用虚拟数据,所以请确认它是否符合您的要求。
我正在尝试在 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
"""
}
解释:
在双引号中,$
被视为特殊字符,因此需要使用 \
进行转义。 \
也是一个特殊字符,因此我们也将通过用双斜杠 \
.
我试过使用虚拟数据,所以请确认它是否符合您的要求。