Скажем, у вас есть простой 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" }
Безрезультатно. Что я делаю не так?
В вашей исходной команде <(curl -s https://raw.githubusercontent.com/.../test.sh) не разрешается вызванной вами командой bash, но оболочкой, из которой вы ее вызываете, выполняемая команда выглядит примерно так: bash /dev/fd/63 "hello".
<(curl -s https://raw.githubusercontent.com/.../test.sh)
bash
bash /dev/fd/63 "hello"
Gradle не является оболочкой и будет просто вызывать bash со строкой "<(curl -s https://raw.githubusercontent.com/.../test.sh)" в качестве аргумента без дальнейшей обработки.
"<(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" }