git clone从Java运行时表现异常

问题描述

所以我正在使用这种方法从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子文件夹,没有。只是空文件夹。

我尝试过的任何其他命令都不会发生这种情况,而在终端中手动运行该命令时也不会发生这种情况。

看起来有些东西专门残酷地杀死了git clone命令,但随后继续正常运行脚本,因此echo BASH_SCRIPT_FINISHED实际上会打印其文本。

那为什么呢?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...