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

Linux 如何将别名输出发送到屏幕、文件和电子邮件?,linux,bash,output,alias,Linux,Bash,Output,Alias,myserver是一个别名 我想将其输出发送到终端屏幕,文件统计dd-mm-yy(名称中包含日期),电子邮件 谢谢你帮助我 date=$(date +Y-%m-%d) myserver | tee >(/usr/bin/Mail myemail@myemail.ex) "stats-$date.txt" | less 这并不是特定于别名的。不过,神奇之处在于进程替换:()(bash和ksh扩展名)生成与进程输入连接的类似文件的对象。在脚本中使用此选项时,脚本必须以#开头/bin/bash

myserver是一个别名

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

谢谢你帮助我

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/##
,写入时将内容传递到stdin,在本例中为--
/usr/bin/Mail


一些补充说明:

  • YYYY-mm-dd
    是一种不那么邪恶的文件格式
    dd-mm-yy
    排序不正确,与
    mm-dd-yy
    不明确
  • less
    需要位于管道的末尾:它不会以编程使用的形式将内容写入自己的标准输出,因此您无法有效地从
    less
    管道传输到其他内容
  • mail
    也需要位于管道的末尾,因为它也不会将内容写入其标准输出。我们的代码工作的原因是
    tee
    正在将我们的管道分割出去,因此它实际上有多个端点
    除了这是一个关于软件使用的问题(即如何使用命令提示符作为最终用户),而不仅仅是关于软件开发的问题,你可以考虑在将来作为一个更合适的论坛。询问如何生成一个文件名,其中包含一个日期作为一个隐藏的额外问题,这确实应该是它自己的问题(在非常不可能的情况下,您无法在我们的知识库中找到它的问题和答案).我是一个新手,但我想我想退出这个社区,因为每次我请求帮助时都会有批评,感谢大家。批评应该被理解为我们鼓励你在未来遵守当地规范,而不是我们鼓励你离开。目标是建立一个高质量的知识库;这意味着为问题和答案设定高标准——但这些标准无论如何都不应该是不可达到的。作为补充说明,输入也存在过程替代。例如,
    cat<谢谢你的提示,我还没有意识到你可以在评论中这样做。
    
    date=$(date +Y-%m-%d)
    myserver | tee >(/usr/bin/Mail myemail@myemail.ex) "stats-$date.txt" | less