Подтвердить что ты не робот

Выполнить оболочку script в Gradle

У меня есть установка сборки gradle, в начале которой я хочу выполнить shellscript в подкаталоге, который подготавливает мою среду.

task build << {
}
task preBuild << {
    println 'do prebuild stuff:'
}
task myPrebuildTask(type: Exec) {
    workingDir "$projectDir/mySubDir"
    commandLine './myScript.sh'
}

build.dependsOn preBuild
preBuild.dependsOn myPrebuildTask

Однако, когда я выполняю задачу либо путем вызова gradle myPrebuildTask, либо просто создавая проект, возникает следующая ошибка:

> A problem occurred starting process 'command './myScript.sh''

К сожалению, это все, что я получаю.
Я также пробовал следующее - ту же ошибку.

commandLine 'sh mySubDir/myScript.sh'

Я использую gradle 1.10 (требуется Android) в Windows, внутри оболочки Cygwin. Любые идеи?

4b9b3361

Ответ 1

использовать

commandLine 'sh', './myScript.sh'

ваш script сам по себе не является самой программой, поэтому вам нужно объявить "sh" как программу и путь к вашему script в качестве аргумента.

Ответ 2

Более общий способ записи задачи exec, но переносимый для Windows/Linux, если вы вызываете командный файл на PATH:

task myPrebuildTask(type: Exec) {
    workingDir "$projectDir/mySubDir"
    if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {
        commandLine 'cmd', '/c', 'mycommand'
    } else {
        commandLine 'sh', '-c', 'mycommand'
    }
}

Это не относится непосредственно к варианту использования для OP (поскольку в рабочем каталоге есть файл script), но заголовок вопроса более общий (и привлек меня сюда), поэтому он может помочь кому-то может быть.

Ответ 3

К сожалению, опции commandLine никак не работали для меня, а мой друг нашел другой способ с исполняемым

executable "./myScript.sh"

и полная задача будет

task startScript() {
  doLast {
     exec {
          executable "./myScript.sh"
      }
  }
}

Ответ 4

Я скопировал свой shell scipt в /usr/local/bin с помощью разрешения +x и использовал его как еще одну команду:

commandLine 'my_script.sh'