作业/过程完成后,如何使iTerm终端通知我?


105

通知中心通知将是理想的选择,但是咆哮,弹跳坞,声音等也可以(或者,如果只能在Terminal.app中完成,我愿意切换回去)。iTerm中是否有打开通知的选项,还是我应该在终端中的命令末尾键入的内容?如果是后者,是否有可能在流程开始后添加警报(例如,如果我意识到这将花费比我最初预期的时间更长的时间,那么我就很难猜测)。

Answers:


197

在已经运行的进程上通知

快捷方式: A或:

Edit -> Marks and Annotations -> Alerts -> Alert on next mark

怪异的眼睛!iTerm从字面上看(在右上角)您的终端。命令完成后,它将联系Notification Center

为什么?

我们已经启动了命令。我们低估了完成所需的时间,我们不想取消它,我们拒绝坐下来观看。例如brew update,很长一段时间后!

要求

iTerm:Shell集成:

iTerm2 -> Install Shell Integration

请注意,在重新启动iTerm2之前,集成不会显示通知。


11
安装完外壳集成后,您可能需要转到iTerm2->首选项->配置文件->终端,向下滚动并取消选中“显示标记指示器”,我不喜欢此外壳集成。如果您希望使用os通知而不是弹出警报样式,则可能还需要编辑->标记和注释->警报->发布通知。
Charles L.

@simonhamp我建议使用触发器(iterm2.com/documentation-triggers.html)埋藏会议
phirschybar

3
@dwanderson您曾经与tmux一起工作吗?这将非常有帮助
Lucas

@Lucas在文档中有一行内容说,shell集成不适用于tmux或屏幕iterm2.com/documentation-shell-integration.html
Rich Stone

2
这只眼睛吓到我了!(╯‵□′)╯︵┻━┻
WTIFS

42

您可以在任何命令后添加以下任意一项,并在命令与命令之间添加分号:

afplay /System/Library/Sounds/Ping.aiff -v 2

osascript -e 'beep 3'

tput bel

或者,如果您喜欢通知中心

osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'

您也可以在配置文件中创建一个别名,notify并在命令末尾添加别名。因此,在您的登录配置文件中

alias notify="tput bel"

然后

sleep 10; notify

或者,如果您启动了命令并且该命令“挂起”,则只需键入notify并点击Enternotify命令完成后,它将在最后运行您的别名,例如

sleep 20

# wait 5 seconds before realising this will take 20 seconds
notify<Enter>

嗯,这个命令osascript -e 'display notification "Task finished" with title "Terminal"'我似乎得到这个错误2015-05-04 12:34:23.227 osascript[30467:1130887] Error loading /Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: dlopen(/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools, 262): no suitable image found. Did find:
truth1ness

错误的/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: no matching architecture in universal wrapper osascript: OpenScripting.framework - scripting addition "/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax" declares no loadable handlers.
第二

您使用的是比Mavericks或Yosemite早的系统吗?
Mark Setchell

不,优胜美地10.10.3
真实性

哦,这很奇怪。您可以尝试更简单的方法osascript -e 'display notification "Hello"'-通过从此处专门复制和粘贴吗?
Mark Setchell

33

而且您随时可以使用 say命令。

通常,当您在终端中运行很长的进程并想要更新时,只需使用此命令即可说出诸如doneerror或之类的内容bazinga

mvn clean install; say done 

此命令将构建一个Java spring应用程序,并且需要很长时间,并且done在该过程完成后会显示出来。


16

iTerm2支持Growl通知。您可以在每个配置文件设置中将其打开。

Preferences…->中选择一个配置文件Profiles。然后在Terminal选项卡中有一个选项Enable Growl Notifications

请记住,还要iTermGrowl首选项中启用通知。

如果您想获得给定流程的通知,可以尝试使用Triggers。您在中定义触发器Advanced配置文件设置的标签中。这样,您可以将Growl通知分配给流程的特定输出(regexp)。

例如,您可以这样做:

$ mycommand; echo "end-of-my-process"

并将触发器连接到“我的进程结束”消息。

更新资料

iTerm2.com上了解有关触发器的更多信息。


因此,我是否正确地说,没有全局方法可以针对任何已完成的过程发出警报,因为我需要运行一次脚本才能知道该脚本在过程结束时的写法(而且我必须为我运行的每个脚本创建一个脚本) )?例如,youtube-dl进程的最后一行是,[download] 100% of 40.13MiB in 00:13但完成的每个文件都会重复此行。我要为“进程结束”字符串输入什么?当我的默认shell提示~ >再次出现时,我可以触发吗?
真相

@ truth1ness我不认为有通用的方法可以通知完成的过程。iTerm发送有关新终端输出,终端输出结束的通知。这可以用于某些过程。我建议的是所有流程的工作方式。“我的进程结束”消息可以是任何唯一的字符串。它的独特之处在于它不会被您的过程打印。字面上可能是“我的进程结束”文本。您必须在触发器定义中输入完全相同的字符串,并向其附加通知。我不知道它是否可以与shell提示一起使用。您必须自己尝试。
baf 2015年

啊,我误会了,我明白了。我能够通过回显输出“我的进程结束”来弹出警报。但是,当我在进程开始之前实际发出echo命令时,也会收到警报。当我实际发出命令并仅查看回显的字符串时,如何告诉iTerm忽略字符串?在帮助文件中,我尝试在触发器正则表达式前加\ 0(“正则表达式匹配的整个值。”),但它仍执行两次触发器。
真相

@ truth1ness具有创造力,例如,在其中使用echo "end-of-""my-process" 引号。仅当过程完成时,它才会匹配“我的过程结束”文本。
baf 2015年

9

有一个名为noti的OSS工具。

您可以轻松地安装它brew install noti并开始使用它,只需在命令前面加上notilike即可noti sleep 3


3

您也可以使用terminal-notifier使用mac os系统的通知。要通过Home brew安装它,只需:

$ brew install terminal-notifier

然后,如果您想在完成工作/流程后显示通知,请使用类似以下的内容

$ <your job/process command> && echo 'Completed' | terminal-notifier -sound default

像这样的显示:

在此处输入图片说明

您还可以更改声音和通知图标。github repo中的更多信息:https : //github.com/julienXX/terminal-notifier


1

安装iTerm2 Shell集成

curl -L https://iterm2.com/shell_integration/install_shell_integration_and_utilities.sh | bash

执行您的命令并连接关注应用程序,例如

./task && ~/.iterm2/it2attention once

作业完成后,它将使iTerm应用反弹其图标。

您还有其他注意选项:

$ .iterm2/it2attention -h
Usage:
  it2attention start
    Begin bouncing the dock icon if another app is active
  it2attention stop
    Stop bouncing the dock icon if another app is active
  it2attention once
    Bounce the dock icon once if another app is active
  it2attention fireworks
    Show an explosion animation at the cursor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.