我工作的地方执行命令需要很长时间。
当命令执行结束时,是否可以使用命令/实用工具来通知我?它可能是一个弹出窗口,也可能是一点声音。
我工作的地方执行命令需要很长时间。
当命令执行结束时,是否可以使用命令/实用工具来通知我?它可能是一个弹出窗口,也可能是一点声音。
Answers:
通常,如果在运行命令之前就知道这一点,则可以使用以下命令启动它:
command; command-after &
这将command-after
在退出前一个命令(无论其退出代码)之后执行。该&
会在后台启动它。
如果您关心成功或失败的退出,请分别使用:
command && command-after-only-if-success &
command || command-after-only-if-fail &
如果命令已经启动,则可以使用作业控制将其挂起,然后将其返回到前台并fg
与通知链在一起:
command
# enter Ctrl-z
fg ; command-after
现在……此后您要做什么取决于您的环境。
在任何系统上,您都可以“响铃”终端铃。取决于您的确切系统,什么才是真正有效的(BSD与GNU Linux等),但是tput bel
应该起作用。不过,我现在无法可靠地对其进行测试。搜索“铃声”以了解更多信息。
在Mac OS X上,可以使用AppleScript弹出Finder对话框:
osascript -e 'tell Application "Finder" to display dialog "Job finished" '
您可以让它对您说些什么:
say "Job finished"
或者,您可以使用Mountain Lion的通知系统:
sudo gem install terminal-notifier # <= only need to do this once
terminal-notifier -message "Job finished!" -title "Info"
在GNOME中,zenity
可以显示一个GTK对话框,从命令行调用。另请参阅此堆栈溢出问题:在linux中显示来自bash脚本的消息框。可以通过您喜欢的软件包管理器进行安装。
zenity --info --text="Job finished"
在实现桌面通知规范的桌面环境(例如Ubuntu和GNOME)上,有一个通知系统,您可以使用notify-send
(部分libnotify
)进行触发。
notify-send "Job finished!"
KDE使用kdialog
,例如:
kdialog --passivepopup 'Job finished'
(command; command-after) &
吗?
我为MacOS X创建了一个简单的工具,正是这个工具。https://github.com/vikfroberg/brb
安装
$ npm install -g brb
使用说明
$ sleep 3; brb
要获取声音通知,您可以使用spd-say "Some text"
。例:
some-command; spd-say "Yo"
sudo apt-get install speech-dispatcher
。或使用替代方法askubuntu.com/questions/501910/…–
我ntfy
正是为此目的而写的。它是跨平台的,可以在长时间运行的命令完成后自动发送通知。
如果您拥有Python pip
(大多数Linux发行版和MacOS都有),请按照以下方法安装它并启用自动通知:
$ sudo pip install ntfy
$ echo 'eval "$(ntfy shell-integration)"' >> ~/.bashrc
$ # restart your shell
除此之外,它还可以:
对于Linux,有一个巧妙的技巧可以自动执行此操作,而不必每次都键入命令进行通知。
首先安装自动密钥。这有助于为不同的按键定义动作。
sudo apt-get install autokey-gtk
现在,在自动键中定义一个新短语并将热键分配为Alt + Enter。添加此短语:
; notify-send "Job finished!" &
#
请注意,第一行之后的新行很重要。
另外,添加一个窗口过滤器。我使用guake和终端。包括您使用的任何其他终端。
.*(guake)|(Terminal).*
你完成了!!
现在,每当您需要获取命令通知时,请使用Alt + Enter而不是Enter / Return来运行它。
资料来源:http : //dotpad.blogspot.in/2014/12/notification-when-command-finished.html
尽管其他答案已经涵盖了完成工作通知的大多数方式,但是由于您以以下格式提出问题,我想给我两美分:
我工作的地方执行命令需要很长时间。
我也有同样的问题。有时某些东西可以运行15分钟。
我的.bashrc文件具有以下功能:
# push a notification to your phone. can be handy if you're running a
# build and you want to be notified when it's finished.
push() {
curl -s -F "token=PUSHOVER_TOKEN" \
-F "user=PUSHOVER_USER" \
-F "title=terminal" \
-F "message=$1" https://api.pushover.net/1/messages.json > /dev/null 2>&1
}
这使用Pushover应用程序将通知推送到我的手机。这样,我可以去吃午餐或参加会议,但仍会收到离开之前在计算机上开始的工作的通知。
我以以下方式使用它:
command_to_run && push "yes! command finished successfully!" || push "awww man! something failed :-("
因此,如果命令返回正确的退出代码,则将执行第一次推送。出现错误时,将执行第二个错误。
Ofc您需要在Pushover创建一个用户,并注册一个应用以从https://pushover.net/发送通知。
希望这对您有所帮助!
如果使用csh或tcsh作为交互式外壳,则可以使用以下notify
命令:
% long-running-command &
[1] 14431
% notify %1
%
(later, when the command finishes)
[1] Done long-running-command
您可以使用set -b
或在bash中达到类似的效果set -o notify
。
这可能不符合您的要求,因为它所做的只是打印一条消息。我不认为可以将其配置为弹出窗口或响铃。
希望几年前我注意到这个线程。我的解决方案与slhck的解决方案基本相同,但是我编写了一个脚本。我用它所有的时间。发表在这里分享。
#!/bin/bash
msg='all done'
quiet=false
if [ "$1" = '-q' ]; then quiet=true; shift; fi
if [ $# -gt 0 ]; then msg="$*"; fi
echo -ne "\x1b]0;$msg\a"
if [ -x /usr/bin/zenity ]; then
unset WINDOWID
exec zenity --info --text="$msg"
elif [ -x /usr/bin/xmessage ]; then
exec xmessage -nearmouse "$msg"
elif [ -x /usr/bin/osascript ]; then
if ! $quiet; then say "done" &; fi
osascript -e "tell application \"System Events\" to display dialog \"$msg\""
else
echo $msg
fi
一点点解释:字符串"\x1b]0;$msg\a"
是ANSI转义序列,用于将消息放入执行该消息的窗口的标题栏中。我发现有时可以很方便地看到消息来自哪个窗口。
所以这来得很晚,但是我已经开始使用系统来执行此操作:我有一个bash脚本,该脚本执行之后传递给它的任何命令
http://somesh.io/2017/02/19/get-notified-when-long-commands-are-done-executing-on-ubuntu/
#!/bin/bash
# file location : /usr/bin/n
set +e
# $@ executes whatever command is typed after the filename
$@
notify-send "Task Completed"
然后我只是在前面加上n
n bundle install
n npm install
我制作了一个应用程序,该应用程序将在流程结束时向您的Android手机发送通知,因此您不必将其束缚在计算机上。
安装,然后添加;notifier.sh
到命令末尾。
例如,如果您的命令是,则可以执行以下make install
命令:
make install; notifier.sh
fg;say "Job finished"
是可行的。但是...有没有什么方法可以使它进一步自动化-即按钟声或完成任何需要花费超过一分钟的阈值的工作后通知?是否有一个shell变量(例如在bash中),它是最后一条命令的经过时间?