如何将通知写入文件?

如何将通知写入文件?

我一直在尝试使用 Bash 脚本自动化 git pull。为了确保我不会错过脚本的执行结果,并且将这些结果记录在某处,以便在出现问题时进行可能的检查,我已将此行添加到我的脚本中:

# Does git pull
`notify-send "Git pull log message" |tee -a "$mylogfile"
# Other stuff

脚本的其余部分工作正常,它执行了预期的操作,例如自动执行 git pull。给的通知notify-send在我的计算机上也显示良好,我可以从通知列表中访问它。

我的问题是我将通知导入到(|tee -a $mylogfile)。它根本没有将通知消息重定向到文件$mylogfile。我也尝试过:

notify-send "Git pull log message" |tee "$mylogfile"
notify-send "Git pull log message" > "$mylogfile"
notify-send "Git pull log message" >> "$mylogfile"

似乎也没有写任何东西。我还从脚本和终端运行这些命令,行为相同。的手册页notify-send也很短,没有提及如何使用该命令进行文件 I/O。我也没有在 Stack Exchange 上找到相关问题,[这个][1]是最接近的,但我试图将通知发送输出到文件,而不是给它一个文件作为输入。我猜什么都没有重定向是因为终端中没有显示任何输出,这意味着没有任何内容写入标准输出。

我想我可以满足于类似的事情

msg="Git pull log message"
notify-send "$msg" && echo "$msg" > "$mylogfile"

这可以通过将命令分成两行并使用变量来工作,但我想将其保留为一行并且没有显式变量,以便脚本中只有该行与通知及其日志记录有关,而没有其他内容。

我确信我一定错过了一些明显的事情。你能帮我吗? [1]:https://askubuntu.com/questions/216326/can-i-redirect-file-as-input-to-notify-send

答案1

其实,在打出问题的过程中,我发现这个命令这足以激励我找到解决方案。因为它可能会帮助处于相同情况的其他人,并且因为我在这个 SE 网站或其他网站上找不到重复的问题,所以我在下面分享它:

echo "Git pull log message" |tee -a "$mylogfile" |xargs -I% notify-send "%"

这个想法是颠倒命令的顺序。notify-send我不是从 开始,而是从echo和开始tee,首先写入日志文件,因为这样tee也会将消息发送到标准输出。这样,我就有了一些可以通过管道传输的东西notify-send。使用xargs可以避免“未指定摘要”错误。

答案2

git pull通过管道传输to的输出notify-send而不写入日志文件:

git pull | xargs -I{} notify-send {}

相关内容