我正在开发一个应用程序,我需要从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 ..
任何人都可以有任何其他解决方案,请回复..
提前致谢...
答案 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");
就是这样!!!