我使用Java Process.exec
启动Shell脚本(出于某种原因),并且无论脚本本身的退出值如何,它们始终返回0退出值(我可以通过在OS Shell中运行该脚本来检查该退出脚本。有关其他信息,这些脚本使用gradle-node-plugin
运行gradle任务。是否有此问题的指针?
总体而言,设置如下:
软件
Linux桌面4.4.0-130-通用#156〜14.04.1-Ubuntu SMP 2018年6月14日星期四13:51:47 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux`
java版本“ 1.8.0_171” Java(TM)SE运行时环境(内部版本1.8.0_171-b11) Java HotSpot(TM)64位服务器VM(内部版本25.171-b11,混合模式)`
Shell脚本执行
Process process = Runtime.getRuntime().exec(new String[]{"sh", "-c", testScript});
返回值是通过test.exitValue()
获得的,并且看起来始终为0。
Shell脚本调用gradle ./gradlew project:clean project:test
。
Gradle脚本依赖于gradle-node-plugin
plugins {
id "com.moowork.node" version "1.2.0"
}
task test(type: NodeTask) {
script = file('./node_modules/mocha/bin/mocha')
args = ['test/sometest.js']
}
答案 0 :(得分:1)
Gradle脚本阻止将退出代码返回到同一shell甚至终止调用shell的可能性。这是通过使用环境变量GRADLE_EXIT_CONSOLE
(任意的非空值就足够了)完成的:
如果您通过Runtime.exec
调用gradle,它将创建一个新的shell,因此您需要在调用脚本之前设置该变量,以便在shell结束后获得退出代码。