Как запустить «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и это работает!

Другие вопросы по тегам