我一直在尝试使用 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 {}