我有一个 jenkins 作业阶段,我将 shell 命令定义为多行字符串,根据传递的输入,变量必须被替换,并且命令在 jenkins 作业阶段执行。
代码示例
def command = """
python3 test.py --key1=$value1 \
--key2=${value2}01-test-env \
--key3=list:${value3}
"""
def exitCode = sh(script: command, returnStatus: true)
我收到意外字符错误和错误替换的错误,尝试使用转义分隔符和美元斜杠字符串。
def command = """
python3 test.py --key1=$value1 \ <<<< these are a problem
--key2=${value2}01-test-env \
--key3=list:${value3}
"""
所以你必须记住,我们在编写 shell 代码时是在 Groovy 中,并且
\
字符用于字符串中的转义序列。 因此,单个 \
字符 Groovy 将其解释为转义序列,该序列后面缺少一个字母,例如 \n
或 \t
。 但是,您希望底层 shell 命令所需的字符串中有一个 \
。 因此,将您的 \
换成它的转义序列 \\
。 所以你的代码应该是:
def command = """
python3 test.py --key1=$value1 \\
--key2=${value2}01-test-env \\
--key3=list:${value3}
"""
这应该可以解决问题。