如何将别名输出发送到屏幕、文件和电子邮件?
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
将我们的管道分开,所以它实际上有多个端点!
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
将我们的管道分开,所以它实际上有多个端点!