Как запустить «say» в указанное время с помощью «at» в macOS?
Бегecho "say hello" | at now+1
в macOS следует поставить в очередь задачу, которая будет выполнена через минуту: поздороваться. Выпускsay hello
работает нормально, как иecho "touch a-file" | at now+1
, но комбинация не делает.
Я считаю, что среда выполнения, в которойlaunchd
выполняетatrun
(at
демон) ограничен и не может завершить синтез речи по указаниюsay
. Однако я не могу легко определить, так ли это.
В чем проблема?
1 ответ
На самом деле, у меня все заработало, и я нашел подробное объяснение того, что происходит.
Видимо, это та же проблема, что и эта: утилита macOS «say» не работает для пользователей без полномочий root в Sierra.
Подробное объяснение: 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
и это работает!