Der Befehl "say" funktioniert nicht mit dem Befehl "at"

380
holmescn

Ich verwende macOS 10.13.5 und möchte, dass der Mac etwas sagt, beispielsweise die aktuelle Uhrzeit, mit dem atBefehl für die angegebene Zeit.

Ich habe den atrunDämon bereits geladen und der folgende Befehl funktioniert:

at now + 1 minute echo "blah" > /tmp/test.txt 

Wenn ich jedoch einen sayBefehl mit dem atBefehl verwende, macht er nichts:

at now + 1 minute say 'hello' 

Ich würde gerne wissen, was passiert ist. Gibt es ein Protokoll oder etwas, was ich herausfinden kann?

1
Ich bin etwas besessener geworden als ich sollte. Etwas über "say" funktioniert nicht ohne direkte Interaktion mit der Standardausgabe oder der "at" -Befehl funktioniert nicht ähnlich. JakeGould vor 5 Jahren 0
Ich denke, es ist wahrscheinlicher, dass der Befehl "say" nicht Teil der Anmeldesitzung des Benutzers ist (insbesondere der Mach-Bootstrap-Kontext). Der `atrun`-Daemon läuft als root und führt den Befehl (z. B. say) unter der entsprechenden Benutzer-ID aus, ohne jedoch den Kontext zu wechseln, und hat daher keinen Zugriff auf die Lautsprecher. Dies ist alles ziemlich schlecht dokumentiert, aber es gibt einige Informationen [hier] (https://derflounder.wordpress.com/2016/03/25/running-processes-in-os-x-as-the-logged-in-user -von-außerhalb des Benutzerkontos /). Gordon Davisson vor 5 Jahren 1
@GordonDavisson Ich habe versucht, mit launchctl asuser $ (id -u Benutzername) / usr / bin / say hallo als Aufgabe auszuführen, immer noch nicht funktioniert. holmescn vor 5 Jahren 0
Ich habe versucht, eine Plist-Datei zu schreiben, die zum Starten WatchPaths verwendet. Was ich erwartet habe, ist, wenn ich einen Text in /tmp/say.txt schreibe, der Lauchd führt `say -f / tmp / say.txt 'aus, aber er ist fehlgeschlagen. holmescn vor 5 Jahren 0
Was ist seltsam, dass man beim Ausführen von cron-Jobs "say" in eine .sh-Datei packen kann und alles funktioniert. Aber ich habe es mit 'at'-Befehl versucht, gescheitert. holmescn vor 5 Jahren 0
@holmescn Als Cron-Job würde der Befehl "say" weiterhin als Benutzer ausgeführt. Wo, wie Gordon Davisson erklärt, der Befehl "atrun" als "root" ausgeführt wird. JakeGould vor 5 Jahren 0

0 Antworten auf die Frage