【问题标题】:Bash Process To Echo to Stderr WITHOUT RedirectionBash 进程在不重定向的情况下回显到 Stderr
【发布时间】:2022-01-21 03:11:00
【问题描述】:

我在使用 ProcessBuilder 的另一种语言 (Java) 中,但这有点离题。我需要一个 bash 进程,它将写入 stderr,我可以使用 ProcessBuilder 调用它。

例子:

ProcessBuilder pb = new ProcessBuilder("echo", "a");
Process p = pb.start();
p.getErrorStream(); // I need this to return "a".

我尝试在ProcessBuilder 的构造函数中添加“>&2”,但它说没有>&2 的命令。我试过使用echoerr,但这是一个bash函数,不是真正的命令,所以找不到。有没有我可以在不转发返回 stderr 的情况下使用的命令?啊?珀尔?任何事物? :D

【问题讨论】:

    标签: java linux bash


    【解决方案1】:

    您可以使用bash(或sh)运行命令以使用重定向运算符:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class StdErr {
        public static void main(String[] args) throws IOException {
            ProcessBuilder pb = new ProcessBuilder("sh", "-c", "echo a >&2");
            Process p = pb.start();
            try (BufferedReader r = new BufferedReader(new InputStreamReader(p.getErrorStream()))) { // I need this to return "a".
                r.lines().forEach(System.err::println);
            }
        }
    }
    

    输出:a(到 Java 进程的标准错误流)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      相关资源
      最近更新 更多