You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RedHat Linux命令输出重定向在Java Process中失效的技术问询

问题解决:Java执行带重定向的Linux命令失效

问题原因

Java的Runtime.exec()方法不会像Linux Shell那样解析命令中的重定向符号(比如&>)。当你直接传入"mycommand &> mycommand.log"时,exec()会把&>和mycommand.log当作mycommand的命令行参数,而非执行输出重定向操作,所以输出依然会打印到STDOUT。

解决方案

要让重定向生效,必须通过Linux Shell来执行整个命令,让Shell负责解析重定向语法。有两种实现方式:

方式1:将命令作为参数传给bash

直接构造调用bash的命令,用-c参数指定要执行的命令字符串:

String command = "/bin/bash -c 'mycommand &> mycommand.log'";
Process.getRuntime().exec(command);

如果需要用双引号包裹命令内容,注意转义Java字符串中的双引号:

String command = "/bin/bash -c \"mycommand &> mycommand.log\"";
Process.getRuntime().exec(command);

方式2:拆分命令参数(推荐)

把bash路径、-c参数和目标命令分开成字符串数组,避免引号转义的问题,更安全可靠:

Process.getRuntime().exec(new String[]{
    "/bin/bash",
    "-c",
    "mycommand &> mycommand.log"
});

原理说明

通过调用/bin/bash -c "命令",相当于让bash进程作为父进程执行目标命令,此时bash会正常解析命令中的&>符号,将mycommand的标准输出(STDOUT)和标准错误(STDERR)都重定向到mycommand.log文件中,达到和直接在Shell执行一致的效果。

内容的提问来源于stack exchange,提问作者codebee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:22:03