如何在新行上输出diff命令

时间:2013-09-04 00:35:33

标签: linux bash shell email diff

我是脚本世界的新手,目前正在使用脚本对我管理的san设备执行运行状况检查。

脚本很简单,可以将命令输出重定向到从远程设备到本地主机的当前文件。然后我使用diff命令比较当前文件和参考文件的输出,并获得差异的电子邮件警报。 diff的输出传递给变量“variable”,然后使用if循环获得结果

到目前为止,我已经将自动登录和电子邮件部分工作了(只有与DIFF命令存在差异时才会收到电子邮件)。然而,我现在获得的电子邮件将其测试连接成一个长字符串,这对于查看是不利的,并且对于将要获得它的人来说不容易理解。

我当前的脚本粘贴在

下面
ssh test@ip_of_device switchshow > switchshow_results
variable=diff switchshow_reference switchshow_results
if [[ $variable -eq 0 ]]
then
    echo $"nothing"
else
    echo $variable | mail -s switch_HARDWARE_CHECK recipeint_email_address
fi

上述脚本的输出是空白的,当diff命令没有找到任何差异时,我没有收到任何电子邮件。

然而,当diff命令找到差异时,我会收到一封粘贴在

下面的电子邮件
16c16 < 0 0 010000 id N4 Online FC F-Port 1 N Port + 1 NPIV public --- > 0 0 010000 id N4 No_Light FC F-Port 1 N Port + 1 NPIV public 26c26 < 10 10 010a00 id N4 Online FC F-Port 1     N Port + 1 NPIV public --- > 10 10 010a00 id N4 No_Light FC F-Port 1 N Port + 1 NPIV public 29c29 < 13 13 010d00 id N4 Online FC F-Port 50:06:01:67:3b:20:23:0a --- > 13 13 010d00 id N4 No_Light FC F-Port 50:06:01:67:3b:20:23:0a

理想情况下,这应该在电子邮件中显示如下..

16c16 < 0 0 010000 id N4 Online FC F-Port 1 N Port + 1 NPIV public --- > 0 0 010000 id N4 No_Light FC F-Port 1 N Port + 1 NPIV public

26c26 < 10 10 010a00 id N4 Online FC F-Port 1 N Port + 1 NPIV public --- > 10 10 010a00 id N4 No_Light FC F-Port 1 N Port + 1 NPIV public

29c29 < 13 13 010d00 id N4 Online FC F-Port 50:06:01:67:3b:20:23:0a --- > 13 13 010d00 id N4 No_Light FC F-Port 50:06:01:67:3b:20:23:0a

输出应该在电子邮件中一次显示一行。有什么建议? 当只有一行有差异时,这种方法很好,但多行差异给我上述问题。我的要求是必须通过电子邮件将差异输出发送给我。 我检查了diff命令中的各种选项,但是我无法找出任何可以帮助我的方法。

任何帮助都会受到很大关注。

3 个答案:

答案 0 :(得分:0)

您需要运行一个sed命令,将'/ n'替换为正在发送的电子邮件竞争中的''。

电子邮件呈现为HTML文本,因此/ n被省略。
使html在下一行显示。

答案 1 :(得分:0)

您忘记在$variable

周围加上引号

使用此:

echo "$variable" | mail -s switch_HARDWARE_CHECK recipeint_email_address

解释原因here

答案 2 :(得分:0)

“变量”应该是什么?

diff的输出? (使用反引号)

还是diff的退出代码? (使用$?)

因为你现在所拥有的东西给了我一个错误。

-bash: switchshow_reference: command not found