从java调用一个简单的shell脚本是行不通的

时间:2013-09-17 18:45:33

标签: java linux bash shell terminal

我的Shell脚本名为“hello”

#This is a shell script
echo "Hello Shell World!"

我的Java代码,

Runtime.getRuntime().exec(new String[]{"./hello"});

我的Java代码执行没有错误,但我没有看到“Hello Shell World!”被打印在终端上。

我相信我的脚本正在执行,因为我没有收到错误, “你好,无法执行,没有这样的文件或目录”。

我正在Linux机器上执行它,Ubuntu。谢谢!

2 个答案:

答案 0 :(得分:2)

从Java运行外部程序时,输出不会转到(并且输入不是来自)Java应用程序的终端。

外部程序(您的脚本)的输入和输出流(STDIN,STDOUT,STDERR)被定向到(来自)InputStreams和OutputStreams,这些可以从您执行此操作时创建的Java Process访问exec(...)

答案 1 :(得分:1)

您应该使用阅读器来捕获命令的输出:

Process p=Runtime.getRuntime().exec(new String[]{"./hello"});
p.waitFor();
BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=reader.readLine();
while(line!=null) {
    System.out.println(line);
    line=reader.readLine();
}