我正在使用 Ubuntu 16.04 LTS。我有一个别名,.bashrc
它使用notify-send
:
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
我可以附加alert
到其他命令作为somecommand; alert
or并在完成后(成功)somecommand && alert
获得弹出通知。somecommand
它提醒我,我在终端窗口中运行的命令现在已最小化或在不同的工作区中已完成执行。
但是当它等待用户输入而不是完成时(例如是/否提示),我想要一个类似的警报。我怎样才能做到这一点?
使用类似的解决方案notify-send
会很好,但其他相对简单的替代方案也可以。
万一出现混淆,我不打算创建对提示的自动回复。我只是想让它提醒我忘记(最小化/在不同的工作区中)终端窗口,同时运行具有冗长输出的命令,这些命令可能要求用户输入(例如apt update && apt upgrade
)。
监视程序的对话并发送警报
您可以监控的活动
xterm
日志文件,现在具有交互模式并让它启动一条
zenity
信息消息,当有来自受监视程序的输入时。如果您愿意,您还可以安装espeak
并让它发送音频消息。1.
zenity
当使用 fifo 的受监控程序有输入时,启动一条信息消息。以下 shellscript 可以监视程序的输出对话并发送警报。
wrapper
xterm
在窗口中启动要监控的程序xterm
在窗口中运行对话(这是您编写输入的地方)/dev/stdout
以及dev/stderr
.while
循环zenity
信息消息窗口。您应该关闭
zenity
窗口(可以使用“Enter”)以返回到xterm
您输入输入的窗口。您也可能希望跑到
espeak
附近zenity
以获取音频消息。在这种情况下,您可以删除该#
行开头的字符。(程序中可能有很多文本,因此将 fifo 重定向到 通常是个坏主意espeak
。最好将 fifo 重定向到cat
并将其打印在“控制台”中。)演示
cp -i
您可以使用and测试一些命令行,mv -i
并且可以使用以下小 shellscript 进行测试program
,帮助文字:
监控
program
:zenity
信息消息窗口:xterm
窗口对话:完成后在原始终端窗口中的“控制台”输出:
监控
cp -ip
:zenity
信息消息窗口:对话
xterm
:监控
sudo parted /dev/sdc
:对话
xterm
:zenity
2.当有东西被写入xterm
窗口时(来自被监控的程序或来自用户) ,启动一条信息消息。以下 shellscript 可以监视与程序的对话并发送警报。
wrapper
xterm
在窗口中启动要监控的程序xterm
在窗口中运行对话(这是您编写输入的地方)xterm
来访问要监视的程序的输出和输入while
循环zenity
信息消息窗口。您应该关闭
zenity
窗口(可以使用“Enter”)以返回到xterm
您输入输入的窗口。现在有一个交互模式,您可以
xterm
像使用任何终端窗口一样使用该窗口。关闭xterm
窗口以停止监控。将这段
bash
代码保存到一个文件中,并给它[例如]名称vialog
,使其可执行,并可能将其移动到您路径中的目录中。您在
xterm
窗口中工作,对话也会回显到起始窗口。邀请反馈
我认为最好使用第二个答案,而不是在我已经存在的答案中添加另一个 shellscript。我将听取反馈并专注于首选的脚本/方法,并尝试将首选的内容合并到一个答案中(除非有理由将它们全部保留(出于不同目的)。
监视程序的对话并发送警报
您可以监控的活动
xterm
日志文件并让它启动一条
zenity
信息消息,当有来自受监视程序的输入时。如果您愿意,您还可以安装espeak
并让它发送音频消息。这个答案侧重于使用fifo的第二种选择。
zenity
当使用 fifo 的受监视程序有输入时,启动一条信息消息。1.1 使用
xterm
,通过fifo监控标准输出和标准错误该
wrapper
方法具有cp -i
和sudo
.sftp
将丢失提示,并且用户无法知道程序何时准备好执行新任务。ssh
.1.2 Using the compiled program
script
and its log file via a fifoThe following shellscript can monitor the output dialogue from a program and send an alert. It needs
espeak
andscript
(script
need not be installed in Ubuntu and Debian).viafifo
.viafifo
'/dev/stdin
,/dev/stdout
anddev/stderr
. The main task in the shellscript is the line with the programscript
, that is monitoring the activity in the terminal window and writing to the fifo.while
loopzenity
info message window and a correspoding spoken message withespeak
.You are expected to close the
zenity
window (can work with 'Enter') to get back to thexterm
window, where you write your input.键入
exit
离开script
和viafifo
。之后,您可以获得包含整个对话的日志文件。viafifo
经测试viafifo
time viafifo
输出viafifo.log
。演示示例
截图
time viafifo
viafifo.log