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

标签 linux bash output alias

<分区>

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

这绝不是别名所特有的。不过,神奇之处在于进程替换:>()(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 需要位于管道的末端:它不会以用于编程用途的形式将内容写入其自己的标准输出,因此您可以从 less 到其他东西很有用。
  • mail 需要在管道的末尾,因为它也不会将内容写入其标准输出。我们的代码工作的原因是 tee 将我们的管道分开,所以它实际上有多个端点!

关于linux - 如何将别名输出发送到屏幕、文件和电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41840095/

相关文章:

c++ - boolean 值 c++ 的格式化输出

java - C 程序在运行时执行 shell 相对于 JAVA 中的输入和输出

ios - 如何根据所选数字更改 UIImageView?

c++ - 如何限制 Linux 采取行动的时间?

linux - bash 脚本中的 awk 脚本

arrays - 获取数组 bash 的随机元素的函数

bash - 如何在 zsh 脚本中提示是/否样式确认?

PHP shell tar 问题,返回代码 2

linux - 从现有 Linux 系统创建 VM

python 桑巴 : user credentials not passed (cli_init_creds)?