gpt4 book ai didi

java - 在Java中执行shell脚本总是返回null

转载 作者:行者123 更新时间:2023-12-01 13:43:32 24 4
gpt4 key购买 nike

我的主目录 ~ 中有一个名为 test.sh 的 shell 脚本文件。我想使用java执行shell文件。我使用以下代码:

Runtime runtime = Runtime.getRuntime();
Process process = null;
String cmd[] = {"/bin/bash","~/test.sh"};
String[] env = {"PATH=/bin:/usr/bin/"};

try
{
process = runtime.exec(cmd,env);
process.waitFor();

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();

String line = reader.readLine();
stringBuilder.append(line);

System.out.println("The token is " + stringBuilder.toString() );

} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}

当我尝试执行以下程序时,我得到 null 结果如下:

The token is null

我哪里出错了?

编辑:

test.sh 只有

echo "Hello"

最佳答案

您需要在进程处于 Activity 状态时从流中读取数据。 waitFor() 返回后访问 getInputStream 没有意义,因为此时进程已经死亡。您应该启动一个线程来读取 getInputStream()。

类似于:

process = runtime.exec(cmd,env);

final BufferedReader reader = new BufferedReader(new InputStreamReader (process.getInputStream()));
final StringBuilder stringBuilder = new StringBuilder();

new Thread () {
public void run () {
String line = reader.readLine();
stringBuilder.append(line);
}
}.start ();
process.waitFor();

关于java - 在Java中执行shell脚本总是返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20510423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com