我的目标最好通过例子来解释。首先,这是一个将在 stdout 和 stderr 上生成示例输出的函数:
output() {
printf '%s\n' 1 2
printf '%s\n' errA errB 1>&2
printf '%s\n' 3 4
}
Run Code Online (Sandbox Code Playgroud)
如果您单独运行它,两个流都将按执行顺序打印到终端:
$ output
1
2
errA
errB
3
4
Run Code Online (Sandbox Code Playgroud)
现在这个函数只是一个占位符,代表我们希望记录的任意脚本的输出(stdout 和 stderr)。具体来说,我们要创建三个不同的日志:
我想出的最接近的解决方案是:
$ { output > >(tee out) 2> >(tee err >&2); } > both 2>&1
$ ls
both err out
$ cat both
errA
errB
1
2
3
4
$ cat out
1
2
3
4
$ cat err
errA
errB
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,out和err文件是所需的,但组合后的文件both不保持执行顺序。
有没有办法同时创建 3 个所需的日志文件?
output作为一个额外的问题,当函数单独运行时,执行顺序输出是否真的得到保证?我尝试运行多次,终端中的混合 stdout 和 stderr 始终相同,并且顺序正确。但这与保证不同。
| 归档时间: |
|
| 查看次数: |
1097 次 |
| 最近记录: |