我需要将 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
将要:
- 将文件 2 (stderr) 重定向到文件 1 (stdout)。
- 将 stdout 重定向(被 stderr 覆盖)到文件
pipe
。
改用这个:
myapp > pipe 2>&1