myserver是别名
我想将其输出发送到终端屏幕,文件统计信息-dd-mm-yy(名称中包含日期),电子邮件
myserver | tee /mydocs/mystats/stats-dd-mm-yy.txt | less | /usr/bin/Mail -s "Admin Server Stats" "myemail@myemail.ex"
感谢您的帮助
答案 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
正在拆分我们的管道,所以它实际上有多个目的!