java执行带参数的shell脚本并返回值 100
.sh文件内容:#!/bin/shif["$2"="381"];thenawk-Fabc"/ALLIP;/,/END$/"/var/ftp/logUrl/MSC/1/$1...
.sh文件内容:
#!/bin/sh
if [ "$2" = "381" ];then
awk -Fabc "/ALLIP;/,/END$/" /var/ftp/logUrl/MSC/1/$1.log | grep -E -a1 "A1|A2|A3|O1|O2" | grep -E -v "^-|/|^$"
fi
if [ "$2" = "381a" ];then
awk -Fabc "/ALLIP;/,/END$/" /var/ftp/logUrl/MSC/1/$1.log | awk -vfff="$3" 'BEGIN{a=0;b=0;}{all[NR]=$0;if($0==fff){a=1;}if($0~/A1|A2|A3|O1|O2|END$/){if(a==1&&b!=0){for(i=b;i<NR;i++){print all[i]}}b=NR;a=0;}}'
fi
直接访问 是有输出的
/var/ftp/batFile/formula.sh "CDBSC5" "681a" "RADIO TRANSMISSION TRANSCODER AND RATE ADAPTOR FAULT"
结果正确
但是java中访问的时候却没有返回值,代码如下
ec.dirOpt("/var/ftp/batFile/formula.bat \"NCMSS2\" \"381a\" \"CCITT7 EVENT REPORTING THRESHOLD REACHED\"");
public List<String> dirOpt(String addrStr){
//System.out.println("-----------dirOpt()-------------");
Process process;
try {
//执行命令
process = Runtime.getRuntime().exec(addrStr);
//取得命令结果的输出流
InputStream fis = process.getInputStream();
//用一个读输出流类去读
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line = null;
List<String> lineStr = new ArrayList<String>();;
//逐行读取输出到控制台
while((line = br.readLine())!=null){
if(line.length()>0){
lineStr.add(line);
}
System.out.println(line);
}
return lineStr;
} catch (Exception e) {
e.printStackTrace();
return null;
} 展开
#!/bin/sh
if [ "$2" = "381" ];then
awk -Fabc "/ALLIP;/,/END$/" /var/ftp/logUrl/MSC/1/$1.log | grep -E -a1 "A1|A2|A3|O1|O2" | grep -E -v "^-|/|^$"
fi
if [ "$2" = "381a" ];then
awk -Fabc "/ALLIP;/,/END$/" /var/ftp/logUrl/MSC/1/$1.log | awk -vfff="$3" 'BEGIN{a=0;b=0;}{all[NR]=$0;if($0==fff){a=1;}if($0~/A1|A2|A3|O1|O2|END$/){if(a==1&&b!=0){for(i=b;i<NR;i++){print all[i]}}b=NR;a=0;}}'
fi
直接访问 是有输出的
/var/ftp/batFile/formula.sh "CDBSC5" "681a" "RADIO TRANSMISSION TRANSCODER AND RATE ADAPTOR FAULT"
结果正确
但是java中访问的时候却没有返回值,代码如下
ec.dirOpt("/var/ftp/batFile/formula.bat \"NCMSS2\" \"381a\" \"CCITT7 EVENT REPORTING THRESHOLD REACHED\"");
public List<String> dirOpt(String addrStr){
//System.out.println("-----------dirOpt()-------------");
Process process;
try {
//执行命令
process = Runtime.getRuntime().exec(addrStr);
//取得命令结果的输出流
InputStream fis = process.getInputStream();
//用一个读输出流类去读
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line = null;
List<String> lineStr = new ArrayList<String>();;
//逐行读取输出到控制台
while((line = br.readLine())!=null){
if(line.length()>0){
lineStr.add(line);
}
System.out.println(line);
}
return lineStr;
} catch (Exception e) {
e.printStackTrace();
return null;
} 展开
展开全部
文件名确实不对
.sh文件才是linux下的批处理文件,它不认bat的
另外要保证.sh中调用的其他函数在当前目录下能正常运行
.sh文件才是linux下的批处理文件,它不认bat的
另外要保证.sh中调用的其他函数在当前目录下能正常运行
追问
谢谢你,这里是我写错了,调用的时候用bat是我在win下测试的时候写的,sh的是在linux下也不可以,bat在win下也不行。不能运行的问题不在这里。
追答
.sh若能在终端运行,表示其程序没错,而在其他目录下调用可能出现运行不下去,一般是因为运行java的用户的权限问问或者是路径问题,有些程序需要调用自己的数据,但不在当前目录下了(运行java时缺省目录可能是java的bin目录),你需要看批处理调了哪些程序,一个个实验。若可能将程序和相关文件均放到同一目录下。
2013-11-19
展开全部
调用的文件名,可不相同
直接调用的是/var/ftp/batFile/formula.sh
JAVA调用的是/var/ftp/batFile/formula.bat
另外,观察过脚本内的环境变量吗
直接调用的是/var/ftp/batFile/formula.sh
JAVA调用的是/var/ftp/batFile/formula.bat
另外,观察过脚本内的环境变量吗
追问
bat不是dos下的批处理文件么?这里怎么会变呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询