问题描述
所以我正在使用这种方法从Java调用bash命令(实际上是kotlin,但是,这是同一回事):
val processBuilder = ProcessBuilder("/bin/bash","-c",script.asstring + "; echo 'BASH_SCRIPT_FINISHED'")
processBuilder.redirectErrorStream(true)
val process = processBuilder.start()
val output = ByteInput.FromInputStream(process.inputStream)
try {
process.waitFor()
} catch (e: InterruptedException) {}
var outputText = Charset.DEFAULT_UNIX.bytesToText(output.read())
outputText = TrimText(ReplaceText(outputText,"\r" to ""))
output.close()
if (outputText.equals("BASH_SCRIPT_FINISHED")) {
return Text.EMPTY
}
if (outputText.endsWith("\nBASH_SCRIPT_FINISHED")) {
return SubText(outputText,outputText.length - "\nBASH_SCRIPT_FINISHED".length)
}
else throw RuntimeException("response:\n$outputText")
在各种编译器,git命令和其他东西上都可以很好地工作。
但是!不知何故,当我的Java进程从root用户运行并调用git clone <my_repo>
时,它返回以下输出:
cloning into '<my_folder>'...
warning: redirecting to <my_repo>.git
BASH_SCRIPT_FINISHED
仅此而已。请注意,BASH_SCRIPT_FINISHED
附加在末尾。我把它放在那里以确保waitFor()方法没有问题。
然后...执行此命令后,我看到
我尝试过的任何其他命令都不会发生这种情况,而在终端中手动运行该命令时也不会发生这种情况。
看起来有些东西专门残酷地杀死了git clone
命令,但随后继续正常运行脚本,因此echo BASH_SCRIPT_FINISHED
实际上会打印其文本。
那为什么呢?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)