在Jenkins管道脚本中转义双引号和单引号

时间:2020-11-02 05:17:49

标签: powershell jenkins groovy jenkins-pipeline

我里面有一个powershell命令,它同时包含双引号和单引号,并且为了使该命令在dos提示符下成功执行,肯定需要使用该命令。我不确定如何使其在管道脚本中转义。

    at org.apache.hadoop.hbase.HBaseConfiguration.checkDefaultsVersion(HBaseConfiguration.java:71)
    at org.apache.hadoop.hbase.HBaseConfiguration.addHbaseResources(HBaseConfiguration.java:81)
    at org.apache.hadoop.hbase.HBaseConfiguration.create(HBaseConfiguration.java:96)
    at com.joinf.hbase.exportData.toMySQL.SparkOnSQLReplaceToHbase$$anonfun$main$1.apply(SparkOnSQLReplaceToHbase.scala:98)
    at com.joinf.hbase.exportData.toMySQL.SparkOnSQLReplaceToHbase$$anonfun$main$1.apply(SparkOnSQLReplaceToHbase.scala:96)
    at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935)
    at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935)
    at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2118)
    at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2118)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90)
    at org.apache.spark.scheduler.Task.run(Task.scala:121)
    at org.apache.spark.executor.Executor$TaskRunner$$anonfun$10.apply(Executor.scala:408)
    at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1360)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:414)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

在以上命令中,您可以看到“倒数第二个”是“获取内容”的结尾引号,而最后一个是“ bat”命令。 我用三斜杠尝试了上面的命令,但出现了错误提示。

bat "powershell -Command "(Get-Content "${Physical_FolderLoc}\\${Stord_Process_Name}.txt") | ForEach-Object { $_ -replace [RegEx]::Escape('E:\\config'), 'I:\\config' } | Set-Content "${Physical_FolderLoc}\\${Stord_Process_Name}.txt" " "

请帮助我解决这个问题。

2 个答案:

答案 0 :(得分:0)

更改每个内部双引号字符串,例如:

"${Physical_FolderLoc}\\${Stord_Process_Name}.txt"

收件人:

('{0}\\{1}.txt' -f $Physical_FolderLoc, $Stord_Process_Name)

答案 1 :(得分:0)

我确切地知道了为什么命令没有转义。 powershell命令中有一个独立的 $ 符号,它也是groovy的系统字符,因此也需要转义。(后面的 $ 字符 ForEach-Object {)。现在以\为前缀,所以转义了。

现在完整的命令是:

bat "powershell -Command \"(Get-Content ${Physical_FolderLoc}\\${Stord_Process_Name}.txt) | ForEach-Object { \$_ -replace [RegEx]::Escape('E:\\config'), 'I:\\config' } | Set-Content ${Physical_FolderLoc}\\${Stord_Process_Name}.txt\" "

虽然没有人尝试提供帮助,但是仍然非常感谢您的建议。