Jenkins使用 sh 步骤执行 shell 命令时,报错“$5“or bracket the value expression “$f5}“

1.问题场景

Jenkins使用sh步骤执行awk进行md5值生成,代码为:

sh """
   find "${workspaceDir}" -type f -print0 | xargs -0 -I {} bash -c 'filename=$(basename "{}"); md5sum "{}" | awk "{print \\$1 \\" \\" substr(\\$0, index(\\$0, \\"${filedir}/\\") + length(\\"${filedir}/\\")) \\" \\" >> \\"${outputFilePath}\\"}"'
   """

Jenkins提示报错:

illegal string body character after dollar sign;solution:either escape aliteral dollar sign
"$5"or bracket the value expression "$f5}"

2.解决思路

2.1检查shell命令转译

  1. Groovy会将$1作为变量,所以再awk 命令中使用 \\ 将 $1 转义为 \\$1
  2. 使用 sed 来提取相对路径时,使用了 | 代替 / 作为分隔符,以避免在路径中包含 / 时出现错误
  3. 使用"\\”来转义每一个双引号

以上规则可以确保命令的正确性,但不是这个报错的根本解决办法,但是如果使用解决方案无法解决的时候可以参考以上规则

2.2解决方案

  • 单引号 ':单引号内的内容会原样输出,不会解释转义字符。
  • 双引号 ":双引号内的内容会解释转义字符,并且会插入 Groovy 变量的值。

将双引号(sh """ """)更改为单引号(sh''' ''')

 sh '''
    find "${workspaceDir}" -type f -print0 | xargs -0 -I {} bash -c 'filename=$(basename "{}"); md5sum "{}" | awk "{print \\$1 \\" \\" filename \\" \\" substr(\\$0, index(\\$0, \\"${workspaceDir}/\\") + length(\\"${workspaceDir}/\\"))\\" >> \\"${bootloader_outputFilePath}\\"}"'  
    '''

解决方案很简单,但是查了好久才查到,希望能帮到遇到同样问题的你。

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值