Как запустить скрипт оболочки, размещенный удаленно из задачи Gradle - PullRequest
0 голосов
/ 12 февраля 2020

Скажем, у вас есть простой bash скрипт

echo $@

Размещенный в репозитории c publi, так что вы можете получить доступ к необработанному файлу, например

https://raw.githubusercontent.com/.../test.sh

Затем вы можете запустить его в оболочке наподобие

bash <(curl -s https://raw.githubusercontent.com/.../test.sh) "hello"

Я хочу иметь возможность достичь этого в рамках задачи Gradle. Я пробовал:

task testScript(type: Exec) {
  workingDir projectDir
  executable "bash <(curl -s https://raw.githubusercontent.com/.../test.sh) 'hello'"
}

и

task testScript(type: Exec) {
  workingDir projectDir
  executable "bash"
  args "<(curl -s https://raw.githubusercontent.com/.../test.sh)" 'hello'
}

и

task testScript(type: Exec) {
  workingDir projectDir
  commandLine "bash", "<(curl -s https://raw.githubusercontent.com/.../test.sh)", "hello"
}

Безрезультатно. Что я делаю не так?

1 Ответ

0 голосов
/ 12 февраля 2020

В вашей исходной команде <(curl -s https://raw.githubusercontent.com/.../test.sh) не разрешается вызванной вами командой bash, но оболочкой, из которой вы ее вызываете, выполняемая команда выглядит примерно так: bash /dev/fd/63 "hello".

Gradle не является оболочкой и будет просто вызывать bash со строкой "<(curl -s https://raw.githubusercontent.com/.../test.sh)" в качестве аргумента без дальнейшей обработки.

Вам нужно найти команду, которую не нужно расширять оболочкой, в которой она находится звонил из. Например, обработка текущей команды в виде простого текста и использование другой оболочки для ее разрешения:

bash -c 'bash <(curl -s https://raw.githubusercontent.com/.../test.sh) hello'

В заключение я считаю, что должно работать следующее:

task testScript(type: Exec) {
  workingDir projectDir
  executable "bash"
  args "-c", "bash <(curl -s https://raw.githubusercontent.com/.../test.sh) hello"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...