管道通知发送块

Piping to notify-send in chunks

我正在尝试编写一个命令,使用 notify-send cl 工具将 unix 输出发送到我的桌面通知。我有以下命令:

mocha -w | while read SPAM_OUT; do notify-send -t 5000 "mocha:" "$SPAM_OUT"; done 哪个做我想要的,只是我希望它在每次 mocha 吐出一些新东西时在一个通知中吐出整个 mocha 的输出。现在,我收到每一行的通知,这非常烦人。

如果有任何工具应该已经为我做这件事,我也会对它们感兴趣。

这应该符合您的预期:

notify-send -t 5000 "mocha:" "$(mocha -w)"

这会将 mocha -w 的完整输出放在 notify-send

的第四个参数中

如果 mocha -w 没有终止,bash-specific read -t 就派上用场了:

mocha -w | ( while true; do MSG=""; while read -t .1 LINE; do MSG="$MSG $LINE"; done; if [ "$MSG" != "" ]; then notify-send -t 5000 "$MSG"; fi; done; )

这会聚合一条消息中在 1/10 秒的时间范围内进入的所有行。您可以调整此超时以满足您的需要。请注意,这是 bash-specific,其他 shell(即 dash)可能不支持它。