为什么 tee 写入文件内容与控制台中显示的内容不同

为什么 tee 写入文件内容与控制台中显示的内容不同

我需要将 Alpine 容器中 cli 应用程序的所有输出重定向到控制台和文件,然后使用该应用程序退出代码退出。

因为我必须使用 sh - 我在堆栈上找到了这个解决方案:

mkfifo pipe 
tee resultfile.txt < pipe &
myapp > pipe

我已经将其修改为

mkfifo pipe
tee resultfile.txt < pipe &
myapp 2>&1 > pipe

所以现在结果是我看到控制台中记录的所有内容,但是 resultfile.txt 只记录了一个流(不知道是否出错)。

我以为在我使用 2>&1 将 myapp 输出从 err 重定向到 out 之后,所有内容都会始终位于一个流中 - 但看起来并非如此。您能指出问题出在哪里吗?

答案1

流重定向的顺序很重要。这:

myapp 2>&1 > pipe

将要:

  1. 将文件 2 (stderr) 重定向到文件 1 (stdout)。
  2. 将 stdout 重定向(被 stderr 覆盖)到文件pipe

改用这个:

myapp > pipe 2>&1

相关内容