日期:2014-05-17  浏览次数:20877 次

Linux wc -l 问题

private int cmdExcute(int date,String cmd,String path){
Process process=null;
cmd=cmd+path;
try{
process=Runtime.getRuntime().exec(cmd);
}catch(IOException e) {
logger.info("linux  error:",e);
}
InputStreamReader reader = new InputStreamReader(process.getInputStream());
BufferedReader bufferedReader = new BufferedReader(reader);
String str=null;
try{
str = bufferedReader.readLine();
}catch(IOException e1) {
logger.info("readLine error",e1);
}int count=0;////////////////////////////////唯一登陆
logger.info("cmd1=="+cmd+",result="+str);
try{
bufferedReader.close();
reader.close();
}catch(IOException e) {
logger.info("close error",e);
}finally{
if(bufferedReader!=null){
try {
bufferedReader.close();
}catch(IOException e) {
logger.info("finally close bufferedReader error",e);
}
}
if(reader!=null){
try {
reader.close();
}catch(IOException e) {
logger.info("finally close reader error",e);
}
}
}
return count;
}

为什么只有第二个命令result才读出来值其它的都没值?

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

首先你先清楚什么是shell
shell是一个程序,一个可以和你交互的程序
shell程序可以解析你输入的指令字符串来执行相关命令
例如你在shell中输入 cat a.txt 
------解决方案--------------------
 grep 'a',shell会建立两个新线程分别执行cat和grep命令,这两个线程之间通过pipe系统调用(即管道)来将cat命令的输出接到grep命令的输入
说到这里你应该明白了,shell中的管道符
------解决方案--------------------
只是存在在shell中,也就是说只有shell才明白你输入的命令行

而使用Java调用Linux程序时,首先确定的是你要调用的是程序,是实际存在在Linux系统中的,比如ls命令,该命令存放在/bin/目录下,这时如果你在你上面的程序中使用了shell中才有的东西(比如管道
------解决方案--------------------
、重定向>以及其他jobs等shell内置命令),Java会将输入作为一个标准的Linux命令去执行,结果是无法解析某些东西(例如管道),所以会认为你输入的命令有错,不予执行。

至于shell内置命令,它和管道符
------解决方案--------------------
类似,也是shell程序自己实现的,在Linux系统中并不存在,例如jobs命令。你可以试试使用man查询一下内置命令,比如man jobs,是没有相关的手册页的,因为它根本不是一个Linux命令,只是shell为了方便操作而内部实现的一个操作,不同的shell实现方式不同,所以内置命令也可能不同。

看到这里,你可以思考一下如何用你写的程序去正确处理类似cat a.txt 
------解决方案--------------------
 grep 'a'这种命令

shell也是一个程序,是程序就可以有参数,拿sh这个shell来说,它有一个-c选项,用于将其后的字符串作为输入,即sh -c cat a.txt 
------解决方案--------------------
 grep 'a',这样以来,sh是一个标准命令(在Linux中实际存在),-c是sh的一个选项,cat a.txt 
------解决方案--------------------
 grep 'a'是-c选项的参数,这样的输入便可以使你的程序正常运行。

千万要理解shell、Linux命令、shell语句的区别!!!

先写这么多吧。。累死了,有问题