在Mac终端上完成命令后如何播放声音警报?

ron*_*ldt 6 audio macos command alarm

当我们运行需要一段时间的命令(如源代码编译或brew升级)时,我们通常会执行其他操作,例如Web搜索,而不是在整个时间内查看命令.

命令完成后,有什么方法可以得到通知吗?

brew upgrade | afplay /System/Library/Sounds/Submarine.aiff -v 10
Run Code Online (Sandbox Code Playgroud)

我在Mac上尝试使用afplay,但问题是a)由于管道没有显示stdout,b)它在命令开始运行后立即播放声音,而不是等到"brew upgrade"结束.

有什么建议吗?

Gio*_*gio 12

brew upgrade && say brew upgrade done

利用该say命令并获得自定义语音通知

一般例子:

YOUR_COMMAND && say YOUR_COMMAND done


Mar*_*ell 10

我想你需要

brew upgrade && afplay /System/Library/Sounds/Submarine.aiff -v 10
Run Code Online (Sandbox Code Playgroud)

如果brew成功完成,那么afplay将会运行.

作为解释的说明,你要求shell确定两个语句("brew"和"afplay")是否都为真 - 因此它必须在执行之前完全评估"brew"语句(即等待它完成) "afplay"以确定两个陈述是否属实.


ron*_*ldt 7

谢谢马克。你给了我一个好主意。

我没注意到&& || 在外壳上也可以表示逻辑运算符。看来“ && afplay ..”仅在“酿造升级”返回0(大多数情况下会发生)并且“ ||”时有效。“ afplay ..”仅在“酿造升级”返回1(或任何非零)含义错误时起作用。我决定使用分号';' 因此,afplay可以在完成工作后的“酿造升级”后发出声音警报。

brew upgrade ; afplay /System/Library/Sounds/Submarine.aiff -v 10
Run Code Online (Sandbox Code Playgroud)

编辑:现在,我在.profile(或.bashrc)中使用以下代码,该代码利用了高级通知程序工具terminal-notifier

function brew { caffeinate -s brew $@; terminal-notifier -title 'Homebrew' -subtitle 'Finished' -message brew' '$1' '$2' '$3 -sound 'recv_mail' -contentImage '/Download/Any/Icon/beer_icon.png';}
Run Code Online (Sandbox Code Playgroud)

请注意:

  1. bash语法的左括号“ {” 后面必须有一个空格。
  2. caffeinate用于防止Brew长时间工作时Mac进入睡眠模式。如果删除“ caffeinate -s”,则还应该重命名函数名称。
  3. 您可以在brew上安装终端通知程序。-contentImage当然是最佳的。