问:

我知道如何使用tee将 aaa.sh 的输出(标准输出)写入 bbb.out,同时还在终端中显示:

./aaa.sh | tee bbb.out

现在,我该如何将标准错误写入名为 ccc.out 的文件,同时显示它?

答:

tee — 从标准输入读取内容,并将内容写到标准输出和文件。

语法

tee [OPTION]... [FILE]...

参数

-a或–append — 追加到给定的 FILEs,不要覆盖

-i或–ignore-interrupts — 忽略中断信号

–help — 显示此帮助并退出

–version — 显示版本信息并退出

对于提问,一个优雅的解决办法是用一个 tee 处理标准输出,另一个 tee 处理标准错误。我们如何做到这一点呢?采用进程替换和文件重定向:

command > >(tee -a stdout.log) 2> >(tee -a stderr.log >&2)

让我们把它分开解释一下:

> >(..)

>(..) (进程替换)创建一个 FIFO 并让 tee 监听它。然后,它使用 >(文件重定向)将 command 的标准输出重定向到第一个 tee 正在监听的 FIFO。注意 > 和左括号之间不能出现空格,否则该结构将被解释为一个重定向。

第二个也是一样:

2> >(tee -a stderr.log >&2)

我们再次使用进程替换来创建一个 tee 进程,该进程从标准输入读取数据,并将其转储到 stderr.log 中。tee 将其输入 输出回标准输出,但由于其输入是 command 的标准错误,我们希望将该 tee 的标准输出再次重定向到我们的标准错误。然后我们使用文件重定向将 command 的标准错误重定向到 FIFO 的输入(tee 的标准输入)。

另外,使用 tee 将一份输入派发给多个文件的示例如下:

tee命令_命令telnet的用法_命令test

参考:

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注