如何在从脚本回显消息到墙时抑制EOF

时间:2013-10-07 08:45:31

标签: bash

在我的bash脚本中,我使用了许多echo "......." | wall行来发送事件通知。

但是,控制台上的结果输出变得难以处理:

Broadcast Message from root@BIGFOOT
        (somewhere) at 16:07 ...

Photo backup started on Mon Oct  7 16:07:55 PHT 2013


Broadcast Message from root@BIGFOOT
        (somewhere) at 16:08 ...

Photo backup successfully finished on Mon Oct  7 16:08:05 PHT 2013


Broadcast Message from root@BIGFOOT
        (somewhere) at 16:08 ...

You may now unplug the Photo Backup HDD.

相反,我们希望它看起来更像是以下内容,

Broadcast Message from root@BIGFOOT
        (somewhere) at 16:07 ...

Photo backup started on Mon Oct  7 16:07:55 PHT 2013
Photo backup successfully finished on Mon Oct  7 16:08:05 PHT 2013
You may now unplug the Photo Backup HDD.

类似于在开放式写聊天会话中出现的内容。

这可能吗?如果是这样,我应该如何修改我的脚本以实现所需的控制台输出?

2 个答案:

答案 0 :(得分:1)

每个wall调用都会在代码顶部添加“广播消息”和空白换行符。

因此,如果您想及时通知用户(例如,实际上是在备份的开始和结束时),那么您将不得不忍受横幅消息。

正如@devnull建议的那样,您可以批量处理这些消息。一种方法是声明一个脚本宽变量说$logmsg然后有两个函数取决于它是你想让用户最终知道的东西还是他们想知道的东西 now

function log_message
{
  $logmsg = "$logmsg\n$1"
}

function log_message_now
{
 log_message "$1"
 echo "$logmsg" | wall
 logmsg = ""
}

(注意我实际上没有测试过上面的内容,所以可能需要一些调试!)

答案 1 :(得分:1)

使用复合命令:

{
    echo "line1"
    echo "line2"
    echo "line3"
} | wall