问:
我知道如何使用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 将一份输入派发给多个文件的示例如下:
参考:
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。