java中执行多条shell命令,除了第一条其他都未执行
2017-01-12 15:30
711 查看
最近项目中需要在在java中执行shell命令,用了最常见方式,代码如下:
在调用时如下调用:
如果你要同时执行两个命令或者多个命令的情况下,那么调用就会如下所示:
当时为了节约性能,改为如下形式:
本以为会取巧一下,但是实际结果为,都不会执行了,即整个返回为空,第一条和第二条都没有执行。
按照上述的方案将代码改为
即将
注意:如果是windows操作系统要改为
至此,问题解决。
原理解析:(待补充- -)
public class ShellUtil { public static String runShell(String shStr) throws Exception { Process process; process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr}); process.waitFor(); BufferedReader read = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = null; String result = ""; while ((line = read.readLine())!=null){ result+=line; } return result; } }
在调用时如下调用:
public class ExecuteShell { public static void main (String[] args){ String command = "some command"; String message = ShellUtil.runShell(command); System.out.println(message); } }
如果你要同时执行两个命令或者多个命令的情况下,那么调用就会如下所示:
public class ExecuteShell { public static void main (String[] args){ String command1 = "some command"; String command2 = "some command"; String message1 = ShellUtil.runShell(command1); String message2 = ShellUtil.runShell(command2); System.out.println(message1); System.out.println(message2); } }
当时为了节约性能,改为如下形式:
public class ExecuteShell { public static void main (String[] args){ String command1 = "some command"; String command2 = "some command"; String command = command1 + " && " + command2; String message = ShellUtil.runShell(command); System.out.println(message); } }
本以为会取巧一下,但是实际结果为,都不会执行了,即整个返回为空,第一条和第二条都没有执行。
解决方案
google了一下:http://stackoverflow.com/questions/21908645/command-in-runtime-getruntime-exec-not-working按照上述的方案将代码改为
public class ShellUtil { private static Logger logger = LoggerFactory.getLogger(ShellUtil.class); public static String runShell(String shStr) throws Exception { Process process; process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr}); process.waitFor(); BufferedReader read = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = null; String result = ""; while ((line = read.readLine())!=null){ result+=line; } return result; } }
即将
Runtime.getRuntime().exec("command");改为
Runtime.getRuntime().exec(new String[]{"/bin/sh","-c","command"});
注意:如果是windows操作系统要改为
Runtime.getRuntime().exec(new String[]{"**cmd** exe","-c","command"});
至此,问题解决。
原理解析:(待补充- -)
相关文章推荐
- JAVA中执行多条shell/bat命令
- java执行命令(cmd,shell)
- android java 执行shell命令(笔记)
- JSch:纯JAVA实现远程执行SSH2主机的SHELL命令
- java执行shell命令或者脚本,返回结果到程序
- java执行命令(cmd,shell)
- linux 下 java 执行 shell 命令
- 【原创】如何在perl中一次执行多条shell命令
- JSch:纯JAVA实现远程执行SSH2主机的SHELL命令
- ssh登录其他机器并执行shell命令
- Android中级篇之用JAVA代码执行shell命令
- java 中调用window系统中的文件,或者执行命令(shell、.CMD、.EXE)并获取返回值(如果有的话)
- java Windows下cmd 命令和Linux下shell命令 执行非JDK中的jar包
- JSch:纯JAVA实现远程执行SSH2主机的SHELL命令
- 用java执行shell命令
- java连接SSH服务器并执行shell命令
- shell学习笔记(1)Linux下在一行执行多条命令
- JAVA代码执行shell命令 并解析
- paip.执行shell cmd 命令uapi java php python总结
- shell 执行多条命令