【问题标题】:How to send an Alias output to both Screen, File and Email? [closed]如何将别名输出发送到屏幕、文件和电子邮件? [关闭]
【发布时间】:2017-01-24 22:25:56
【问题描述】:

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"

谢谢你的帮助

【问题讨论】:

  • 旁白:因为这是一个关于软件使用的问题(即如何作为最终用户使用命令提示符),而不是关于软件的问题发展,你可能会考虑superuser.com作为未来更合适的论坛。
  • 另外,询问如何生成带有日期的文件名作为隐藏的额外问题确实应该是它自己的问题(在极不可能的情况下,您找不到它被问到并且已经在我们的知识库中回答了)。
  • 我是新手,但我想我想退出这个社区,因为每次我寻求帮助时都会有批评者,不过谢谢
  • 批评应该被理解为我们鼓励您在未来遵守当地规范,而不是我们鼓励您离开。目标是建立一个高质量的知识库;这意味着为问题的答案设定高标准——但这些标准绝不应该是高不可攀的。

标签: linux bash output alias


【解决方案1】:
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 需要位于管道的end:它不会以用于编程使用的形式将内容写入其自己的标准输出,因此您无法有效地从 less 管道到别的东西。
  • mail also 需要位于管道的末尾,因为它也不会将内容写入其标准输出。我们的代码有效的原因是 tee 正在拆分我们的管道,因此它实际上有多个端!

【讨论】:

  • 附带说明,输入也存在流程替换。例如,cat < <(ls /) 将列出根目录,并将其输出通过管道传输到cat。在这种情况下,第一个< 是一个普通的重定向符号,<(ls /) 将是连接到ls 的输出和cat 的输入的类文件对象。
  • 感谢您的提示,我还没有意识到您可以在 cmets 中做到这一点。
猜你喜欢
  • 2014-05-18
  • 2013-12-18
  • 2012-05-23
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多