如何创建命令来向我发送短信以告知其是否失败或通过?

如何创建命令来向我发送短信以告知其是否失败或通过?

我正在尝试创建一个命令,无论通过还是失败,它都会向我发送一条短信。

到目前为止我的命令如下所示:

command && echo OK || echo Failed | echo ' 'at `date | sendmail [email protected]

因此,当文本传递时,我希望它向我发送一条文本(通过向我发送电子邮件),并且文本应如下所示:

3 月 2 日下午 2:37 确定

当测试失败时,它会向我发送以下短信:

3 月 2 日下午 2:37 失败。

我不确定如何echo正确连接输出,我希望有人知道我的问题出在哪里。外壳是tcsh

编辑:

对于像 'ls' 这样的命令,我希望在终端中列出目录,但我希望“Ok”或“fail”转到“sendmail”部分。因此,所有命令都应照常打印到终端,但将“failed”或“ok”部分发送到 sendmail 部分。

答案1

OP的评论:

对于类似这样的情况,ls我想要终端中列出的目录,但是我想要“确定”或“失败”转到该sendmail部分。

我无法在 中执行此操作tcsh。这应该可以在 中工作bash

your_command ; { [ $? -eq 0 ] && echo -n OK || echo -n Failed ; echo " at `date`" ; } | …

我希望有人能从这里获取它,将上面的内容移植到tcsh并写出更好的答案。

我能想到的最好的办法是写一个bash脚本,前提是你的bash机器上有这个脚本。关键是你可以从 运行这样的脚本tcsh。这是一个快速而粗糙的脚本:

#!/bin/bash
"$@"
{ [ $? -eq 0 ] && echo -n OK || echo -n Failed ; echo " at `date`" ; } | sendmail [email protected]

如果需要,可以修改shebang。将这段代码保存到文件(例如sendstatus.sh),使用使其可执行chmod,然后像这样使用它:

./sendstatus.sh your_command
./sendstatus.sh your_command --with option -s
./sendstatus.sh ls
./sendstatus.sh ls -sl

修复:

  • echo -n导致下一个echo继续在同一行;
  • 最后一个echo没有从管道读取,因为它没有意义;
  • date在 ` 标记内(命令替换);
  • 命令按分隔符分组,{}因此它们的输出一起传递到最终|

相关内容