答案1
如果你看一下stderred
的 README,你会注意到它修改了write()
功能(以及相关的流函数):
stderred 钩在 write() 和 libc 中的一系列流函数(fwrite、fprintf、error...)上,以便为进入终端的所有 stderr 输出着色,从而使其与 stdout 区分开来。基本上它使用适当的 ANSI 转义码包装进入描述符为“2”的文件的文本使文本变为红色。
强调我的。
当您将 stdout 重定向到 stderr 时,它们指向的是同一个东西,确实如此。但是,无论您执行什么重定向,写入 stdout 的函数调用仍将其称为 stdout。它们仍然访问文件描述符 1,而不是 2。
如果您想要写入 stderr 并将其设置为彩色,则普通的 shell 重定向是不够的。您需要使用直接写入 stderr 的程序。awk 函数类似的 Unix 和 Linux 帖子可以适用于多个参数:
error () (
IFS=' '
awk -v msg="$*" 'BEGIN { print msg > "/dev/stderr" }'
)
我使用这个/dev/stderr
,因为它更容易阅读,并在GNU awk 文档。另请注意,我使用了( )
而不是{ }
来进行命令分组。这会导致命令在子 shell 中运行,因此我可以安全地修改 IFS,而不会影响调用 shell 或脚本。
参考: