首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 其他服务器 >

:java程序调用sh脚本没有反应,小弟我错在哪里

2012-02-25 
求救:java程序调用sh脚本没有反应,我错在哪里?请教各位,谢谢!我有一个sh脚本,名称为servicestart.sh,如下(

求救:java程序调用sh脚本没有反应,我错在哪里?
请教各位,谢谢!

我有一个sh脚本,名称为servicestart.sh,如下(最简单的):
       
        echo   "classpath   is   : "
            echo   "pash   is   : "


还有一个java程序,用来调用上面的sh脚本,名称为testsyn.class,源文件内容如下:
import   java.io.*;

public   class   testsyn   {
    public   static   void   main(String[]   args)   {

    try{
    System.out.println( "准备运行同步脚本! ");
    Process   pid=null;
    pid=Runtime.getRuntime().exec( "./servicestart.sh   >   shz ");
    if(pid!=null){
    System.out.println( "进程号: "+pid.toString());
    }else{
    System.out.println( "没有pid! ");
    }
    System.out.println( "同步脚本运行完毕! ");
    }catch(IOException   ioe){
    System.out.println( "执行脚本时发生错误: "+ioe.getMessage());
    }  
 
        }
}


结果是:
1、当我直接在系统命令行运行:./servicestart.sh   >   shz
        脚本顺利运行,产生shz文件。
2、当我通过java程序运行sh脚本时:java   testsyn,结果如下:
      准备运行同步脚本!
          进程号:java.lang.UNIXProcess@f62373
          同步脚本运行完毕!
  并没有产生shz文件,说明脚本没有运行。

说明:我的OS是Solaris   10,并且在X86和Sparc上都是这样的情况。

我这样用java程序调用sh脚本为什么不行啊?我错在哪里呢?谢谢高手指教!

[解决办法]
你应该深入理解函数exec,还有类RunTime, Process。我改了一下你的代码,应该可以帮助你!

servicestart.sh 文件如下:
echo "classpath is : "
echo "pash is : "
echo $1 ##1
echo $2 ##2
源代码为:
import java.io.*;

public class testsyn {
public static void main(String[] args) {
BufferedReader br = null;
try{
System.out.println( "准备运行同步脚本! ");
Process pid=null;
pid=Runtime.getRuntime().exec( "./servicestart.sh > shz ");
/*
> 与 shz 是 servicestart.sh 的 auguments。servicestart.sh中的#1,2用于测试。
*/
if(pid!=null){
System.out.println( "进程号: "+pid.toString());
br = new BufferedReader(
new InputStreamReader( pid.getInputStream() ), 1024 );
pid.waitFor();
}else{
System.out.println( "没有pid! ");
}
System.out.println( "同步脚本运行完毕! ");
String line = null;
while( br != null && (line = br.readLine()) != null ){
System.out.println( line );
}
}catch(Exception ioe){
System.out.println( "执行脚本时发生错误: "+ioe.getMessage());
}finally{
if( br != null ){
try{
br.close();
}catch( Exception e ){}
}
}
}
}

热点排行