Java执行带重定向或管道的shell命令的问题
来源:互联网 发布:江苏微盛网络 怎么样 编辑:程序博客网 时间:2024/06/05 02:39
以前没用过java执行shell命令,以为也是像C那样便捷,用个system函数就可以搞定。今天一用才发现不是那么回事。java里面执行shell命令有两种方法:
1.使用ProcessBuilder
1.使用ProcessBuilder
ProcessBuilder pb=new ProcessBuilder(cmd); pb.start();2.使用Runtime
Runtime.getRuntime().exec(cmd)
但是这个两种方法都有个问题,执行诸如:ps -ef | grep -v grep 带有管道或重定向的命令就会出错。我们都知道使用以上两种方法执行命令时,如果带有参数就要把命令分割成数组或者List传入,不然会被当成一个整体执行(会出错,比如执行"ps -e")。对于|,<,>号来说,这样做也不行。对于Linux系统,解决方法就是把整个命令都当成sh的参数传入,用sh来执行命令。
List<String> cmds = new ArrayList<String>(); cmds.add("sh"); cmds.add("-c"); cmds.add("ps -ef | grep -v grep"); ProcessBuilder=new ProcessBuilder(cmds); Process p = pb.start();Windows下把sh换成cmd.exe就行了。
PS:linux下测试是可用的,Windows大家可以自己测试下
0 0
- Java执行带重定向或管道的shell命令的问题
- SHELL重定向和管道的实现
- cmd命令的管道重定向
- linux 的重定向、管道、xargs 命令
- linux 的重定向、管道、xargs 命令
- 数据流重定向、命令执行的判断依据及管道命令
- Shell 命令 正则/管道/重定向
- shell命令重定向与管道
- shell重定向,管道
- Shell的命令的结果重定向
- shell基础-输入输出以及重定向/多命令顺序执行与管道符/通配符与特殊符号
- shell的特性之十:输入输出重定向和管道
- shell 之 tee 命令,实现重定向到文件的同时仍能 通过管道 (|)传给接下来的命令
- linux shell 管道命令(pipe)使用及shell重定向
- shell 重定向的先后顺序问题
- shell下的time重定向问题
- Java程序调用Linux命令时的重定向问题
- Shell脚本学习笔记-重定向与管道命令
- 对于windows 2003,可以两人同时同一桌面控制一台服务器
- DoModal出来的窗口往主窗口发送消息
- 三十分钟掌握STL
- jQuery中对select下拉框的基本操作
- nexus7刷机流程
- Java执行带重定向或管道的shell命令的问题
- Linux是如何解析文件路径名的????
- GDB调试精粹及使用实例
- VB POST数据
- 学习笔记:linuxc第六章上
- 代码重构-艰难的开始——重构
- 今年暑假不AC
- Java中的Enum的使用与分析
- VB获取IE8地址栏的URL