2013-05-09 237 views
0

嗨,我想从下面的代码无法运行shell脚本

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

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


    BufferedReader stdErr=null; 
    BufferedReader stdIn=null; 
    try{ 
    System.out.println("In Script"); 
    String[] commands= {"ls"}; 
    Process process = Runtime.getRuntime().exec("/mobilityapps/testScript/testScript.sh"); 
    stdIn= new BufferedReader(new InputStreamReader(process.getInputStream()));   
    stdErr = new BufferedReader(new InputStreamReader(process.getErrorStream())); 
    String inline= stdIn.readLine(); 
    String errline =stdErr.readLine(); 
    System.out.println("*Inline*"+inline); 
    System.out.println("*Errline*"+errline); 
    while(inline!=null){ 
     System.out.println(inline); 
     inline=stdIn.readLine(); 
    } 
    while(errline!=null){ 
     System.out.println(errline); 
     errline=stdErr.readLine(); 
    } 
    System.out.println("Process Exit Value: "+process.waitFor()); 
    }catch(Exception excp){ 
     excp.printStackTrace(); 
    } 
} 

}运行shell脚本

我试图调用脚本是

CURRDATE=`date '+%d%b%Y'` 
TIMESTAMP=`date '+%H:%M'` 
BASE_PATH=/mobilityapps/testScript 
LOGFILE=${BASE_PATH}/logs_${CURRDATE}_${TIMESTAMP}.log 
echo ${CURRDATE} ${TIMESTAMP}>>${LOGFILE} 

全部都脚本和Java程序在同一个目录下。 当我从PUTTY运行testScript.sh运行良好

但是,当我从Java程序运行Process Exit Value is 255

任何人都可以提出更改?

+0

'Runtime..exec'你有没有考虑升级到'ProcessBuilder'?需要支持1.4还是之前? – 2013-05-09 03:48:04

+0

我正在与java6 – 2013-05-09 03:51:56

+0

嗨,我应该升级到ProcessBuilder – 2013-05-09 03:55:05

回答

2

尝试用

Runtime.getRuntime().exec("./mobilityapps/testScript/testScript.sh"); 

更换路径

Runtime.getRuntime().exec("/mobilityapps/testScript/testScript.sh"); 

如果只是用/在开始时,就意味着它是一个绝对路径。 使用'。'表示这是一个相对路径。

+0

我的文件是/mobilityapps/testScript/testScript.sh绝对路径,而我正在执行它从/ opt/java6/jre/bin – 2013-05-09 03:38:13

+0

你有没有得到任何值'系统输出'?他们可能有用于调试的有用信息。 – Bill 2013-05-09 03:40:06

+0

你也有'+ x'位(又名执行位)设置为'shell脚本'吗? – Bill 2013-05-09 03:41:09