如何从陷阱发球stderr?

时间:2019-02-23 00:15:34

标签: bash logging

我想用以下脚本记录所有要转到stderr的内容:

#!/bin/bash
exec 2> >(tee -a file >&2)
trap '>&2 echo text; exit' INT
read

ctrl + c 将触发陷阱,但是输出丢失。令人惊讶的是,使用exec 2>> file,它将最终出现在文件中,但我还需要将其显示给用户。

如何记录stderr,包括陷阱输出,同时仍向用户显示?

1 个答案:

答案 0 :(得分:2)

为了使tee忽略中断信号,可以在其前面添加一个额外的trap '' INT

#!/bin/bash
exec 2> >(trap '' INT; tee -a file >&2)
trap '>&2 echo text; exit' INT
read

编辑:该陷阱包含在子外壳中,由注释中的@ John1024表示。