java调用linux命令的奇怪问题,求解决

ijkh007 2018-05-03 05:03:37
java调用linux脚本,输入cmd为"qmgr -c \"set queue old acl_users+=wd_tony\""
程序输出rcmd为:/bin/sh -c "qmgr -c \"set queue old acl_users+=wd_tony\""
诡异的是我直接拷贝输出的rcmd值到linux下,没有任何问题。
但是,程序执行的话,会报这样的错误:
-c: line 0: unexpected EOF while looking for matching `"'
-c: line 1: syntax error: unexpected end of file
我实在是想不到哪里会有问题,恳请大家帮忙,多谢了。

代码如下:
public static String executeLinuxCmd(String cmd) {
String rcmd ="/bin/sh -c "+cmd;
System.out.println(rcmd);
Runtime run = Runtime.getRuntime();
try {
Process process = run.exec(rcmd);
InputStream in = process.getInputStream();
InputStream err = process.getErrorStream();
BufferedReader bs = new BufferedReader(new InputStreamReader(in));
BufferedReader bs1 = new BufferedReader(new InputStreamReader(err));
String lineStr;
while ((lineStr = bs.readLine()) != null)
System.out.println(lineStr);// 打印输出信息
while ((lineStr = bs1.readLine()) != null)
System.out.println(lineStr);// 打印输出信息
in.close();
bs.close();
bs1.close();
process.destroy();
int value = process.waitFor();
System.out.println(value);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
...全文
402 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ijkh007 2018-05-03
  • 打赏
  • 举报
回复
自己结贴吧,可能是这个命令是多级指令,所以需要写成下面这种。 public static String executeLinuxCmd(String cmd) { //String rcmd[] ={"/opt/pbs/dispatcher/bin/qmgr ",cmd}; String rcmd ="/bin/sh -c "+cmd; System.out.println(rcmd); Runtime run = Runtime.getRuntime(); try { Process process = run.exec(new String[] {"qmgr", "-c", "set queue old acl_users+=wd_tony"}); InputStream in = process.getInputStream(); InputStream err = process.getErrorStream(); BufferedReader bs = new BufferedReader(new InputStreamReader(in)); BufferedReader bs1 = new BufferedReader(new InputStreamReader(err)); String lineStr; while ((lineStr = bs.readLine()) != null) System.out.println(lineStr);// 打印输出信息 while ((lineStr = bs1.readLine()) != null) System.out.println(lineStr);// 打印输出信息 in.close(); bs.close(); bs1.close(); process.destroy(); int value = process.waitFor(); System.out.println(value); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } return null; }

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧