2015-05-15 3 views
4

Я почти уверен, что я что-то пропускаю.Почему град не запускает мой сценарий оболочки?

У меня проект андроида градиента с файлом build.gradle. Внутри здесь я указываю задачу:

task doSomething(type: Exec) { 
    println("okay clearly you have got to be getting in here") 
    commandLine 'sh /Users/dzt/Desktop/create_a_file_on_desktop.sh' 
} 

и что не работает вообще. файл оболочки только в буквальном смысле делает:

#!/bin/sh 
echo "hi" > /Users/dzt/Desktop/i_am_a_byproduct.txt 

и я побежал chmod u+x на него, так что исполняемый файл (я проверил на регулярной Баш оболочки).

Я также попытался использовать заводную команду:

"cd ../ && sh /Users/dzt/Desktop/create_a_file_on_desktop.sh".execute() 

, который не работает. Я немного в тупике. Я НЕ вижу выходной файл. однако, я вижу заявление на печать в консоли gradle.

Что здесь происходит?

** EDIT **

хорошо, я пробурено вниз больше ->

cd ../ не работает. почему это? Мне нужно использовать относительный путь, по крайней мере относительно этого каталога

+1

Просто убедитесь, что вы пробовали это следующим образом: 'commandLine '/ Users/dzt/Desktop/create_a_file_on_desktop.sh'' или в groovy: '" /Users/dzt/Desktop/create_a_file_on_desktop.sh ".execute()'? – AndroidEx

+0

Я думаю, что они будут работать.по какой-то причине 'cd ../' не работает должным образом –

ответ

1

Gradle не позволяет команде cd по какой-либо причине. некоторые команды просто НЕ работают с использованием groovy.

вместо этого, я использовал cd внутри моего сценария оболочки. что, похоже, работает нормально.

3

Вызов должен быть

commandLine 'sh', '/Users/dzt/Desktop/create_a_file_on_desktop.sh' 

или иначе это считается команда один. Но вы хотите запустить sh со сценарием как param. С другой стороны, поскольку вы установили бит выполнения, вы можете просто вызвать скрипт оболочки напрямую.

http://gradle.org/docs/current/dsl/org.gradle.api.tasks.Exec.html См

Запуск cd как вы хотите с cd ../ && sh script это также не будет работать, как это, так как && это командный сценарий оболочки. Если вы хотите запустить, как это, вы должны запустить оболочку и заставить ее работать как команда. Например.

commandLine 'sh', '-c', 'cd ~/scripts && sh myscript.sh' 
+0

не работает со мной – User9527

0

Во-первых, вы должны положить в корневой уровень gradle.build файл. Вам нужно написать это так, чтобы фактически выполнить задачу.

task doSomething << { 
    group 'yourGroupName' 
    description 'Runs your bash script' 
    exec { 
     workingDir "$projectDir/../pathto/" 
     commandLine 'bash', '-c', './bashscript.sh' 
    } 
} 

Тогда вы можете выполнить с: ./gradlew -q doSomething. В этом случае я использовал bash, но вы можете использовать любую поддерживаемую оболочку сценариев, такую ​​как sh, perl, python и т. Д.

Смежные вопросы