【问题标题】:How do I make iTerm terminal notify me when a job/process is complete?当工作/流程完成时,如何让 iTerm 终端通知我?
【发布时间】:2015-07-13 01:07:39
【问题描述】:

通知中心通知是理想的,但咆哮、弹跳坞、声音等也可以(或者如果只能在 Terminal.app 中完成,我愿意切换回来)。 iTerm 中是否有一个选项可以打开通知,或者我应该在终端中的命令末尾键入什么?如果是后者,是否可以在进程开始后添加警报(例如,如果我意识到它需要的时间比我最初预期的要长,我不擅长猜测)。

【问题讨论】:

    标签: macos terminal iterm iterm2


    【解决方案1】:

    通知已经运行的进程:

    快捷方式: A 或:

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

    : iTerm 将密切关注您的终端(在右上角)。命令完成后会联系Notification Center

    为什么?

    命令已经启动,完成时间被低估了,我们不想取消命令或等待它完成。 (即长时间后brew update

    要求

    iTerm: Shell Integration:

    iTerm2 -> Install Shell Integration

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

    【讨论】:

    • 安装 shell 集成后,您可能需要转到 iTerm2 -> Preferences -> Profiles -> Terminal ,向下滚动并取消选中“显示标记指示器”,我不喜欢这个 shell 集成。如果您想要操作系统通知而不是警报样式弹出窗口,您可能还需要编辑 -> 标记和注释 -> 警报 -> 发布通知。
    • @dwanderson 你有没有用 tmux 得到这个?这会很有帮助
    • 这只眼睛吓到我了!! (╯‵□′)╯︵┻━┻
    • @ShamalKarunarathne 您是否在要通过 SSH 连接的机器上安装了 shell 集成脚本?
    • @GregL 谢谢它的工作。不知道我还必须在 SSH 主机中安装集成。
    【解决方案2】:

    您可以随时使用say 命令。

    通常,当您在终端中运行较长的进程并想要更新时,您可以简单地使用此命令说出doneerrorbazinga 之类的内容。

    mvn clean install; say done 
    

    此命令构建java spring app,耗时较长,完成后会说出done

    【讨论】:

    • 天啊,这不仅很有帮助,而且非常酷,而且是一种非常简单的方法。
    • 鉴于其令人敬畏,这个答案没有获得足够的选票。 ?
    • 这既简单又令人惊奇!
    【解决方案3】:

    您可以在任何命令之后添加以下任何一项,命令和它之间使用分号:

    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 并点击 Enter,它会在命令结束时运行您的 notify 别名,例如

    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 &amp; Record Tools.osax/Contents/MacOS/List &amp; Record Tools: dlopen(/Users/mmarotta/Library/ScriptingAdditions/List &amp; Record Tools.osax/Contents/MacOS/List &amp; Record Tools, 262): no suitable image found. Did find:
    • 错误/Users/mmarotta/Library/ScriptingAdditions/List &amp; Record Tools.osax/Contents/MacOS/List &amp; Record Tools: no matching architecture in universal wrapper osascript: OpenScripting.framework - scripting addition "/Users/mmarotta/Library/ScriptingAdditions/List &amp; Record Tools.osax" declares no loadable handlers.的第二部分
    • 您使用的系统是否早于 Mavericks 或 Yosemite?
    • 不,优胜美地 10.10.3
    • tput bel 很棒,因为它在通过例如连接到另一台机器时也可以工作。 ssh.
    【解决方案4】:

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

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

    记得还要在Growl 首选项中启用iTerm 通知。

    如果您想获得给定进程的通知,您可以尝试使用Triggers。您在配置文件设置的Advanced 选项卡中定义触发器。通过这种方式,您可以将 Growl 通知分配给流程的特定输出(正则表达式)。

    例如,您可以这样做:

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

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

    更新

    iTerm2.com 上阅读有关触发器的更多信息。

    【讨论】:

    • 所以我是否正确没有全局方法来获取任何已完成进程的警报,因为我需要运行脚本一次才能知道它在进程结束时写入的内容(我有为我运行的每个脚本创建一个)?例如,youtube-dl 进程的最后一行是[download] 100% of 40.13MiB in 00:13,但它完成的每个文件都会重复此行。我会为“我的进程结束”字符串输入什么?当我的默认 shell 提示符 ~ &gt; 再次出现时,我可以触发吗?
    • @truth1ness 我不认为有一种通用的方法可以了解已完成的过程。 iTerm 发送新终端输出通知,终端输出结束。这适用于某些进程。我建议的所有流程的工作方式。 “我的进程结束”消息可以是任何唯一的字符串。以独特的方式使其不会被您的流程打印。可能是字面上的“我的流程结束”文本。您必须在触发器定义中输入完全相同的字符串并向其附加通知。我不知道它是否适用于 shell 提示符。你必须自己尝试一下。
    • 啊,我误会了,我现在明白了。我能够通过回显输出“我的进程结束”弹出警报。但是,当我在进程开始之前实际发出 echo 命令时,我也会收到警报。当我实际发出命令并只查看回显字符串时,我将如何告诉 iTerm 忽略该字符串?从帮助文件中,我尝试在触发器正则表达式前面加上 \0(“正则表达式匹配的整个值。”),但它仍然执行触发器两次。
    • @truth1ness 要有创意,例如使用带有引号的echo "end-of-""my-process"。只有当进程完成时,它才会匹配“我的进程结束”文本。
    【解决方案5】:

    有一个OSS工具叫noti

    您可以使用brew install noti 轻松安装它,然后只需在命令前加上noti 前缀即可开始使用它,例如noti sleep 3

    【讨论】:

      【解决方案6】:

      您也可以使用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

      【讨论】:

        【解决方案7】:

        安装 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
        

        【讨论】:

          猜你喜欢
          • 2016-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-20
          • 2013-04-22
          • 1970-01-01
          • 2011-08-20
          • 2020-05-18
          相关资源
          最近更新 更多