java执行命令行命令
传统的java直接执行Dos命令,通常会找不到命令或目录,需要配置命令中相关的path变量,使用shell脚本执行,可以正常模拟终端命令行执行(即先登录,后使用user用户进行执行)。
/**
* shell方式执行命令
*/
public static String executeCmd(String shellCommand){
ProcessBuilder processBuilder = new ProcessBuilder("bash","-c",shellCommand);
processBuilder.directory(new File("/user"));//设置执行命令所在目录
processBuilder.redirectErrorStream(true);//设置错误输出流合并到正常输出流,使得运行结果只需要从一条流中读取
int runningStatus = 0;
String s = null;
StringBuilder result = new StringBuilder();
BufferedReader in = nu;;;
Process p = null;
try{
p = processBuilder.start();
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
//BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while((s = in.readLine())!= null){
result.append(s).append("\r\n");
log.info(s);
}
/*
while((s = error.readLine())!= null){
result.append(s).append("\r\n");
log.error(s);
}*/
try{
runningStatus = p.waitFor();
} catch (InterruptedException e){
}
} catch (IOException e){
result.append(e.getMessage());
} finally {
closeStream(in);
//closeStream(error);
//销毁子进程
if(p != null){
p.destroy();
}
}
log.info(result.toString());
return result.toString();
}
private static void closeStream(Closeable stream){
if(stream != null){
try{
stream.close();
} catch (Exception e){
}
}
}
直接执行
Runtime.getRuntime().exec("chmod 755 "+path + "/" + name);