今天在修改项目公共模块代码的时候遇到一个问题,通过RunTime方法执行shell方法时遇到脚本中存在管道符时报错问题。解决方法如下
以下附上公共类代码:
package com.centerm.ivycloud.vcenter.share.commontools.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import com.centerm.ivycloud.vcenter.share.commontools.bean.ExecResult;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class ShellUtil {
private static Logger log = Logger.getLogger(ShellUtil.class);
private static String HOSTIP = "127.0.0.1";
private static String USER = "root";
private static String PASS = "centerm";
private String LOCAL = "1";//local 1为本地执行,其他为远程执行
private File FILE = null;
public ShellUtil(String hOSTIP, String uSER, String pASS, String lOCAL) {
super();
HOSTIP = hOSTIP;
USER = uSER;
PASS = pASS;
LOCAL = lOCAL;
}
public ShellUtil(String hOSTIP, String uSER, String pASS) {
super();
HOSTIP = hOSTIP;
USER = uSER;
PASS = pASS;
LOCAL = "1";
}
public ShellUtil(String hOSTIP, String uSER, File file,String local) {
super();
HOSTIP = hOSTIP;
USER = uSER;
FILE = file;
LOCAL = local;
}
public ShellUtil(String hOSTIP, String uSER, File file) {
super();
HOSTIP = hOSTIP;
USER = uSER;
FILE = file;
LOCAL = "1";
}
public static void main(String[] args){
ShellUtil shellUtil = new ShellUtil("192.168.127.163","root","centerm");
ExecResult r = shellUtil.execGetResult("qemu-img check /IvyCloud/cv-data/image-repo/win73D1227-2.img --output json 2>/dev/null", 1);
System.out.println(r.getCode());
System.out.println(r.getResult());
}
/**
*
* @param cmd 命令
* @param flag flag为1是远程执行, 不传就判断LOCAL是否为1,如果为1为本地执行,
* @return
*/
public String exec(String cmd, int ...flag) {
int retryTime = 0;
String result = "";
if(flag.length != 0 && flag[0] == 1){
log.debug("exec flag == 1");
return exeRemoteCommandGetOutput(cmd, 1);
}
try {
if(LOCAL.equals("1")){
result = exeLocalCo