2015-05-15 96 views
4

我幾乎可以肯定我在俯視一些東西。爲什麼gradle不能運行我的shell腳本?

我有一個帶有build.gradle文件的android 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上它,所以它是可執行文件(I雙定期bash shell的檢查)。

我還試圖用groovy命令:

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

這也不起作用。我有點難住。我沒有看到輸出文件。不過,我確實在gradle控制檯中看到了我的打印語句。

這是怎麼回事?

**編輯**

好吧,我鑽下來更多 - >

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。

相反,我在我的shell腳本中使用了cd。這似乎工作得很好。

3

呼叫必須

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

否則這被認爲是一個命令。但是你想用腳本作爲參數來啓動sh。另一方面,因爲你已經設置了執行位,所以你可以直接調用shell腳本。

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

運行cd像你想用cd ../ && sh script不會也不喜歡這個工作,因爲&&是一個shell腳本命令。如果你想這樣運行,你必須運行shell並使其作爲命令運行。例如。

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,但您可以使用任何支持的腳本shell,如sh, perl, python等。