我想在以下脚本中记录进入 stderr 的所有内容:

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

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

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

最佳答案

为了让 tee 忽略中断信号,可以在它之前添加一个额外的 trap '' INT:

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

编辑: 在子shell 中包含了@John1024 在评论中提出的陷阱。

关于bash - 如何从陷阱中开球?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54836912/

10-12 22:42