Bash重定向:将stderr/stdout保存到不同的文件,并仍然在控制台上打印出来

Alb*_*lby 6 bash

这是一个简单的程序.

class Redirection {

public static void main (String args[]){
    System.out.println("Hello World_Stdout");
    System.err.println("Hello World_Stderr");
}

}
Run Code Online (Sandbox Code Playgroud)

我想在控制台上看到所有输出,但同时我想将stdout和stderr存储在不同的文件中.我尝试了以下命令,但无济于事.

$java Redirection 3>&1 2>stderr 1>stdout 1>&3 2>&3
Run Code Online (Sandbox Code Playgroud)

stderr和stdout文件的文件大小为0.

所以基本上我想做什么"tee"命令,但我也想捕获stderr.

Max*_*tin 13

这是一个答案:

./yourScript.sh > >(tee stdout.log) 2> >(tee stderr.log >&2)

如果您的脚本具有STDOUT和STDERR描述符,则会获得2个文件stdout.log + stderr.log以及所有输出(Err + Out)到控制台.

  • **./your.sh 2>&1 | tee -a log** 这会将 stderr 重定向到 stdout,因此 tee 会同时响应日志和屏幕。它也应该工作 (2认同)