【问题标题】:Execute shell script with options and parameters使用选项和参数执行 shell 脚本
【发布时间】:2015-03-25 18:28:13
【问题描述】:

我正在使用 Jenkins 在 linux 机器上启动脚本。

当我在服务器上运行手动时,它工作

/bin/bash -c '/some/script MyProduct SomeBranch'

当我使用 groovy 运行此程序时,它不起作用

我得到的错误与我没有通过“-c”选项一样,所以不知何故“-c”不起作用

这是我的代码:

branchName = "SomeBranch"
configName = "release"
println "Building for branch "+branchName+" and configuration "+configName

def chkbranch = { String product, String branch -> mkcmd( product, branch ) } 
private def mkcmd ( String product, String branch ) {
  // Build the command string to run
      def cmd = "/bin/bash -c '/some/script "+product+" "+branch+"'"
      def sout = new StringBuffer()
      def serr = new StringBuffer()
  // Run the command
      println "running "+cmd
      def proc = cmd.execute()
      proc.consumeProcessOutput ( sout, serr )
      proc.waitForProcessOutput ()
      println "out> $sout"
      println "err> $serr"
      return sout
}

chkbranch ( "MyProduct", branchName )

这是在 Groovy 中构建命令的正确方法吗?:

def cmd = "/bin/bash -c '/some/script "+product+" "+branch+"'"
cmd.execute()

谢谢!

类似于我尝试过的有用资源的问题:

【问题讨论】:

    标签: groovy


    【解决方案1】:

    尝试按以下方式运行命令:

    def cmd = ["/bin/bash", "-c", "/some/script", product, branch]
    

    你也可以试试:

    def cmd = ["/some/script", product, branch]
    

    如果 /some/script 是可执行的 - 顺便说一句,它是放在根目录下 (/) 吗?

    【讨论】:

    • 这成功了!现在它说“权限被拒绝”访问脚本中的文件,但这次它正在运行脚本!是的,脚本在根目录下,有什么特别需要我担心的吗?
    • 而不是。我考虑过权限:)
    • 它必须是["/bin/bash", "-c", "/some/script $product $branch"]... - 要运行的shell 命令是-c 之后的唯一参数。并小心,产品和分支是什么。如果产品是<backtick>rm -rf /<backtick>,它将运行
    猜你喜欢
    • 2015-07-27
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2011-08-31
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多