下面是我的管道脚本,我调用一个shell脚本并传递参数。其中$np和$cp包含特殊字符,即# ex:abcdefgh#abd#we23:
def name = 'xyz'
def np = ''
def cp = ''
def pnumber = 'if.com'
def mnumber ='12'
def unumber= 'abc'
pipeline{
stages{
stage('stage1'){
steps{
script{
cp = sh(script: "cat file.txt", returnStdout: true)
np = sh(script: "cat file2.txt", returnStdout: true)
}
}
stage('stage2'){
steps{
script{
sh "./myscript.sh $name $mnumber $pnumber $unumber $np $cp"
}
}
}
}
我的剧本是:
#!/bin/bash
name=$1
pnumber=$2
mnumber=$3
unumber=$4
np=$5
cp=$6
sqlplus $unumber/$np/$cp/$unumber/$mnumber/$pnumber<<EOF
select date/$name;
exit;
EOF
我得到的管道脚本的输出没有最后一个参数。举例来说:
./myscript.sh abc xyz 123 User abcdefgh#abd#we23
它不是采用最后一个参数。
请你帮忙让我知道我的剧本有什么问题。如果需要的话,我很乐意提供其他细节。谢谢
1条答案
按热度按时间xmd2e60i1#
最简单的方法是在shell端添加单引号,当密码或其他变量中有
'
时,再回到问题上来:最可靠的方法是使用env变量传递所有内容,然后shell可以正确引用它。
或者你可以序列化前。然后在shellscript中读取它(或者在python中,因为它可以导入json)。
您可能需要研究groovy字符串插值规则、shell引用规则和shell扩展。Groovy插入字符串,然后通过shell引用来计算。简直是噩梦。https://gist.github.com/Faheetah/e11bd0315c34ed32e681616e41279ef4
然后你的脚本也应该被修复-它缺少引用。把它发布到shellcheck上,并给出实现建议。
请注意,您的文件可以包含尾随换行符。Shell命令替换
$(...)
删除尾随的换行符。你可能想在groovy或bash中删除它们。