<分区>
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"
谢谢你帮助我
<分区>
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
这绝不是别名所特有的。不过,神奇之处在于进程替换:>()
(bash 和 ksh 扩展)生成连接到进程输入的类文件对象。在脚本中使用它时,您的脚本必须以 #!/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
需要位于管道的末端:它不会以用于编程用途的形式将内容写入其自己的标准输出,因此您可以从 less
到其他东西很有用。mail
也 需要在管道的末尾,因为它也不会将内容写入其标准输出。我们的代码工作的原因是 tee
将我们的管道分开,所以它实际上有多个端点!关于linux - 如何将别名输出发送到屏幕、文件和电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41840095/