当前位置: 技术问答>linux和unix
java调用shell命令 不能正确执行
来源: 互联网 发布时间:2017-01-22
本文导语: public static void main(String args[]) throws Exception{ Process p1 = null; String exep1 = "grep -c 'TAG' /home/zhenm/xiaoxiao/run/test"; System.out.println(exep1); p1=Runtime.getRuntime().exec(exep1); // 等待命令执行完毕 p1.waitFor(); //获取执行结...
public static void main(String args[]) throws Exception{
Process p1 = null;
String exep1 = "grep -c 'TAG' /home/zhenm/xiaoxiao/run/test";
System.out.println(exep1);
p1=Runtime.getRuntime().exec(exep1);
// 等待命令执行完毕
p1.waitFor();
//获取执行结果
InputStream out1= p1.getInputStream();
InputStreamReader in1 = new InputStreamReader(out1);
BufferedReader br1 = new BufferedReader(in1);
String line1=null;
String res1="";
line1=br1.readLine();
while(line1!=null){
res1=res1+line1;
line1=br1.readLine();
}
System.out.println(res1);
我在java中用grep -c命令来检测一个文件中有多少行包含某个字符串,如上代码中:命令grep -c 'TAG' /home/zhenm/xiaoxiao/run/test直接在shell下运行结果是正确的,结果为1,因为test里面有一行包含字符TAG,但是放在java程序里面调用执行,结果总是0,总得不到和shell一致的正确结果。
麻烦高手帮忙,这个问题困扰我好几天了,急急急啊!先谢谢大家~
Process p1 = null;
String exep1 = "grep -c 'TAG' /home/zhenm/xiaoxiao/run/test";
System.out.println(exep1);
p1=Runtime.getRuntime().exec(exep1);
// 等待命令执行完毕
p1.waitFor();
//获取执行结果
InputStream out1= p1.getInputStream();
InputStreamReader in1 = new InputStreamReader(out1);
BufferedReader br1 = new BufferedReader(in1);
String line1=null;
String res1="";
line1=br1.readLine();
while(line1!=null){
res1=res1+line1;
line1=br1.readLine();
}
System.out.println(res1);
我在java中用grep -c命令来检测一个文件中有多少行包含某个字符串,如上代码中:命令grep -c 'TAG' /home/zhenm/xiaoxiao/run/test直接在shell下运行结果是正确的,结果为1,因为test里面有一行包含字符TAG,但是放在java程序里面调用执行,结果总是0,总得不到和shell一致的正确结果。
麻烦高手帮忙,这个问题困扰我好几天了,急急急啊!先谢谢大家~
|
#grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/sh
#echo $?
0
#grep "roottest" /etc/passwd
#echo $?
1
root:x:0:0:root:/root:/bin/sh
#echo $?
0
#grep "roottest" /etc/passwd
#echo $?
1
|
shell执行成功后返回结果是0
|
p.waitFor()得到的是grep执行成功后的返回值,shell上打印的是grep -c 的标准输出