如何将别名输出发送到屏幕、文件和电子邮件?

How to send an Alias output to both Screen, File and Email?

myserver 是一个别名

我想将其输出发送到终端屏幕、文件 stats-dd-mm-yy(名称中包含日期)、电子邮件

myserver | tee /mydocs/mystats/stats-dd-mm-yy.txt | less | /usr/bin/Mail -s "Admin Server Stats" "myemail@myemail.ex"

谢谢你的帮助

date=$(date +Y-%m-%d)
myserver | tee >(/usr/bin/Mail myemail@myemail.ex) "stats-$date.txt" | less

这绝不是别名所特有的。不过,神奇的是 process substitution: >()(bash 和 ksh 扩展)生成一个 file-like 对象连接到一个输入过程。在脚本中使用它时,您的脚本必须以 #!/bin/bash 开头,而不是 #!/bin/sh;并且它不能以 sh yourscript 开头(这将强制使用基线 POSIX 解释器)。

此语法将替换为文件名,通常在 Linux 上的形式为 /dev/fd/##/proc/self/fd/##,写入时将内容传递给 -- 的标准输入案例 -- /usr/bin/Mail.


一些补充说明:

  • YYYY-mm-dd 是一种远没有那么邪恶的文件格式。 dd-mm-yy 排序不正确,与 mm-dd-yy.
  • 不明确
  • less 需要在管道的 end 处:它不会以用于编程用途的形式将内容写入其自己的标准输出,因此您无法有效地从 less 传输到其他内容。
  • mail also 需要在管道的末尾,因为它也不会将内容写入其标准输出。我们的代码工作的原因是 tee 将我们的管道分开,所以它实际上有多个端点!