当我们运行需要一段时间的命令(如源代码编译或brew升级)时,我们通常会执行其他操作,例如Web搜索,而不是在整个时间内查看命令。
命令完成后,有什么方法可以得到通知吗?
brew upgrade | afplay /System/Library/Sounds/Submarine.aiff -v 10
我尝试使用Mac上的afplay,但问题是a)由于管道没有显示stdout,b)它在命令开始运行后立即播放声音,而不是等到“brew upgrade”结束。
有什么建议吗?
答案 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';}
请注意:
caffeinate
用于防止Mac在brew工作很长时间后进入睡眠模式。如果删除'caffeinate -s',则还应重命名函数名称。答案 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
替换为:
Purr.aiff
和Blow.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终端通常发出的哔声。