如何在 macOS 上使用“at”在指定时间运行“say”?

如何在 macOS 上使用“at”在指定时间运行“say”?

在 macOS 上运行echo "say hello" | at now+1应该会将一个任务排入队列,以便一分钟后执行:说你好。 发出say hello可以正常工作, 也可以echo "touch a-file" | at now+1,但组合则不行。

我认为launchd执行的运行时环境atrunat守护进程)受到限制,无法完成指示的语音合成say。但是,我无法轻易确定是否是这种情况。

问题是什么?

答案1

实际上,我让它工作了,并且找到了对正在发生的事情的详细解释。

显然,这与这个问题是相同的:macOS 的“say”实用程序不适用于 Sierra 中的非 root 用户

详细解释:https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard

运行后,brew install reattach-to-user-namespace我现在可以运行了echo reattach-to-user-namespace say hello | at next minute,而且它有效!

为了简化我的生活,我编写了一个小包装器并将其放置在~/bin我首先添加到的地方$PATH。它所做的就是使用所有提供的参数调用原始程序say,但“重新连接”。据我所知,在不需要时重新连接似乎没有任何坏处。

~/bin/say

#!/usr/bin/env bash
reattach-to-user-namespace /usr/bin/say $@

现在我只需书写echo say -v Nora Rimember att de kettel is ånn de ståuv | at now +5 minutes,它就能发挥作用!

相关内容