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

时间:2013-11-09 12:47:55

标签: macos audio command alarm

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

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

brew upgrade | afplay /System/Library/Sounds/Submarine.aiff -v 10

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

有什么建议吗?

7 个答案:

答案 0 :(得分:9)

我认为你需要

brew upgrade && afplay /System/Library/Sounds/Submarine.aiff -v 10

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

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

答案 1 :(得分:9)

brew upgrade && say brew upgrade done

利用say命令获取自定义语音通知

一般例子:

YOUR_COMMAND && say YOUR_COMMAND done

答案 2 :(得分:6)

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

我没有注意到&&,||也可以指shell上的逻辑运算符。看来'&& afplay ..'只有当'brew upgrade'返回0时才会起作用,这种情况大部分时间都会发生,并且'|| afplay ..'仅在'brew upgrade'返回1(或任何非零)意义错误时起作用。我决定用分号';'因此,在完成工作后,无论“酿造升级”如何,afplay都可以发出声音警报。

brew upgrade ; afplay /System/Library/Sounds/Submarine.aiff -v 10

编辑:现在我在.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';}

请注意:

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

答案 3 :(得分:2)

要直接回答该问题,无需安装任何额外功能,而只需发出系统警报即可。

在运行“命令”后播放系统警报声音:

command; printf "\a"

乔治的答案也很好,就像“

command; say command is done

喜欢连续报警的想法;我将执行以下操作以每10秒重复一次警报:

command; while :; sleep 10; do say command is done; done

command; while :; sleep 2; do printf "\a"; done

答案 4 :(得分:1)

sleep 30m; for i in {1..10}; do afplay /System/Library/Sounds/Purr.aiff -v 10; done

OP要求发出警报。此代码以最大音量重复声音Purr.aiff 10次,以确保您能听到它(如闹钟)。用您想要的命令替换sleep30m。如果您希望更长时间,请使用10替换for循环中的10000

如果您想要无限警报(按 CTRL - C 退出),请尝试:

sleep 30m; while :; do afplay /System/Library/Sounds/Purr.aiff -v 10; done

如果您想要其他声音,可以尝试将Purr.aiff替换为:

  • Basso.aiff
  • 列表项
  • Frog.aiff
  • Hero.aiff
  • Pop.aiff
  • Submarine.aiff
  • Blow.aiff
  • Funk.aiff
  • Morse.aiff
  • Tink.aiff
  • Bottle.aiff
  • Glass.aiff
  • Ping.aiff
  • Sosumi.aiff

Purr.aiffBlow.aiff是我个人的最爱。

答案 5 :(得分:0)

这是我添加到.zshrc上的一个小功能

noti() {
  if [[ $? = 0 ]]; then
    say OK
  else
    say error
  fi
}

从外壳执行some command ; noti会根据命令结果播放“ OK”或“错误”。

我发现它是&&用法的更好替代方法,因为它同时通知成功和错误。

答案 6 :(得分:0)

旧线程,但是在macOS Catalina上对我有用的简单本机命令:

$ echo -e "\007"

或附加到命令:

$ long_running_program && echo -e "\007"

这本质上是回响BEL(贝尔)ASCII字符,它发出了本机macOS终端通常发出的哔声。