java执行复杂shell命令的问题(带重定向或管道的命令)

java执行复杂shell命令的问题(带重定向或管道的命令)

最近在把有道云上的笔记转到csdn上,与大家分享下自己的项目经历,问题解决方案,可以关注我哦,最近会集中发博的。
 以前没用过java执行shell命令,以为也是像C那样便捷,用个system函数就可以搞定。今天一用才发现不是那么回事。java里面执行shell命令有两种方法:

  1. 使用ProcessBuilder
ProcessBuilder pb=new ProcessBuilder(cmd);
pb.start();
  1. 使用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就行了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值