在 macOS 上运行echo "say hello" | at now+1
应该会将一个任务排入队列,以便一分钟后执行:说你好。 发出say hello
可以正常工作, 也可以echo "touch a-file" | at now+1
,但组合则不行。
我认为launchd
执行的运行时环境atrun
(at
守护进程)受到限制,无法完成指示的语音合成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
,它就能发挥作用!