0

在我的 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.

这有点像在开放式写聊天会话中出现的内容。

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

4

2 回答 2

1

使用复合命令:

{
    echo "line1"
    echo "line2"
    echo "line3"
} | wall
于 2013-10-07T12:37:58.547 回答
1

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

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

正如@devnull 建议的那样,您可以批量处理消息。一种方法是声明一个脚本范围的变量say ,然后根据它是您希望用户最终知道的东西还是他们现在$logmsg想知道的东西有两个函数

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

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

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

于 2013-10-07T09:12:31.973 回答