如何将Alias输出发送到屏幕,文件和电子邮件?

时间:2017-01-24 22:25:57

标签: linux bash output alias

myserver是别名

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

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

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

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解释器)。

此语法将替换为文件名,通常在/dev/fd/##/proc/self/fd/##形式的Linux上,在写入时将内容传递给stdin - 在这种情况下 - {{1 }}

一些补充说明:

  • /usr/bin/Mail是一种不那么邪恶的文件格式。 YYYY-mm-dd排序不正确,与dd-mm-yy不明确。
  • mm-dd-yy需要位于管道的 end :它不会以编程方式使用的形式将内容写入自己的stdout,因此无法管道从less到其他。
  • less 需要位于管道的末尾,因为它也不会将内容写入其标准输出。我们的代码工作的原因是mail正在拆分我们的管道,所以它实际上有多个目的!