【问题标题】:Shell script to run a command and send the commands output as a report in email用于运行命令并将命令输出作为报告发送到电子邮件中的 Shell 脚本
【发布时间】:2013-10-11 20:57:18
【问题描述】:

我正在尝试编写一个 shell 脚本,该脚本将运行一个命令来 ssh 到多台机器并将输出存储在一个变量中并通过电子邮件将其作为报告发送。这是我目前在脚本中的内容:

#!/bin/bash 

DcEmitterConn='yinst ssh -H test.out "netstat -a | grep ES | grep 25019 | wc"'

SUBJECT="DC-Connections"
EMAIL="abc@abc.com"
EMAILMESSAGE="report.out"
echo $DcEmitterConn> $EMAILMESSAGE
#send email using /bin/mail 
/bin/mail -s "$SUBJECT" "$EMAIL"< $EMAILMESSAGE

在脚本中执行上述命令后,它会要求我输入密码,然后打印请求的输出。我在上述脚本中面临的问题是我无法将命令输出存储在变量中并将其打印在电子邮件正文中。如果我遗漏了什么,有人可以告诉我。

输出看起来像这样:

abc@dh1.data.ac2.abc.com's password:  (yinst-pw) 
     40     240    3560
abc@dh2.data.ac2.abc.com's password:  (supplied by yinst-pw)
     50     300    4450

提前致谢!

【问题讨论】:

  • 我试过了..它对我不起作用。
  • 要在 var 中输出,您应该使用此语法 var=$(code),在您的情况下为 DcEmitterConn=$(yinst ssh -H test.out "netstat -a | grep ES | grep 25019 | wc")

标签: bash shell email report


【解决方案1】:

你应该在第 8 行的 $DcEmitterConn 周围加上双引号。你可以避免临时文件:

SUBJECT="DC-Connections"
EMAIL="abc@abc.com"
yinst ssh -H test.out "netstat -a | grep ES | grep 25019 | wc" | /bin/mail -s "$SUBJECT" "$EMAIL"

【讨论】:

  • 这听起来合乎逻辑,但我仍然收到一封没有内容的电子邮件。我想问题出在我最初为上述命令输入密码以打印输出的地方。我应该包括哪些步骤来处理密码部分?
  • 你可能想设置passwordless SSH connection
  • 是否有可能将输出实际发送到 stderr ?尝试在命令前加上 2>&1
  • #!/bin/bash SUBJECT="DC-Connections" EMAIL="abc@abc.com" yinst ssh -H test.out "netstat -a | grep ES | grep 25019 | wc" 2>&1 | /bin/mail -s "$SUBJECT" "$EMAIL" 这就是我所做的......但仍然没有运气......我想我需要设置无密码 SSH 连接......
猜你喜欢
  • 1970-01-01
  • 2013-06-28
  • 2021-09-08
  • 1970-01-01
  • 2019-11-17
  • 2023-03-10
  • 2017-09-25
  • 1970-01-01
  • 2017-07-25
相关资源
最近更新 更多