Unix脚本没有使用Process Runtime在Java中运行

时间:2009-11-12 14:31:33

标签: java tomcat unix

我正在开发一个应用程序,我需要从Java Code运行unix的一些脚本。

我使用的平台是Unix,Tomcat 5.5 ..

为此,我的示例代码如下:

Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("netstat -i|tail -n +3|cut -d ' ' -f1");
System.out.println("exitValue = "+proc.exitValue());

我已授予tomcat用户所有权利。

现在,我的程序输出案例是:

Script                         exitValue()
=======                        ============
netstat -i                          0
netstat -i|tail -n +3               4
sudo netstat -i                     1
sudo netstat -i|tail -n +3          1

上表显示只有第一个脚本在unix中执行,其他所有脚本都在失败。

我不确定,但我只是假设我必须以root用户身份运行Tomcat Server ..

任何人都可以有任何其他解决方案,请回复..

提前致谢...

3 个答案:

答案 0 :(得分:2)

如果我没记错的话,管道(“|”)由shell处理。 Java根本不会处理它们......

有一些解决方法:

  • 使用您的命令作为参数运行bash:

    runtime.exec("bash -c \"netstat -i|tail -n +3|cut -d ' ' -f1\"");

  • 编写一个运行所有这些命令的bash脚本,并从Java运行该脚本:

    #!/bin/bash
    netstat -i|tail -n +3|cut -d ' ' -f1

  • 在Java中创建管道:读取netstat -i的输出并用Java将其连接到tail -n +3 ...

答案 1 :(得分:0)

使用|在Unix中链接命令是shell的一部分,Runtime.exec()直接运行命令,而不是shell。快速解决方案可能是(未经测试,因为我目前没有可用的Unix机箱)作为第一个命令将shell作为前缀。

Process proc = runtime.exec("/bin/sh netstat -i|tail -n +3|cut -d ' ' -f1");

答案 2 :(得分:0)

得到了上述问题的解决方案..

我刚创建了简单的shell脚本文件,并将脚本放在.sh文件中。

现在在java方面,我只是调用简单的shell脚本文件..

Process proc = runtime.exec("sh /usr/tmp/try1.sh");

就是这样!!!